簡體   English   中英

在 javascript 中引用 ASP.NET web 控件

[英]Referencing the ASP.NET web control in javascript

我在我的用戶控件中創建了一個下拉列表,請參閱下面的源代碼,

<asp:DropDownList ID="ddlInd" runat="server" DataSourceID="indXmlDS" DataTextField="text" DataValueField="text"></asp:DropDownList>

在 Page_load 我已經這樣做了:

protected void Page_Load(object sender, EventArgs e)
    {
       ClientScriptManager cs = Page.ClientScript;
       cs.RegisterStartupScript(this.GetType(), "myScript", "<script language='javascript' src='../Scripts/myJS.js'></script>");
        ddlInd.Attributes["onchange"] = "showTextbox()";
    }

那么,如果我想在我的外部 javascript 文件 myJS.js 中引用此控件,我應該使用什么代碼?

我曾嘗試使用document.getElementById("<%=ddlInd.ClientID %>")但它會返回NULL

任何人都可以幫忙嗎? 謝謝

編輯:

不確定在此處附加該 myJS.js 文件是否有幫助

function showTextbox() {
    var sid = <%=ddlInd.ClientID %>;
    //alert(sid);
    var s = document.getElementById('<%=ddlInd.ClientID %>'); // <-- problem here 

    alert(s);
    if (s.options[s.selectedIndex].value == "Other") {
        myDiv.style.display = "inline";
        alert("display");
    }
    else {
        myDiv.style.display = "none";
        alert("none");
    }
}

編輯2:

我找到了一種解決方法,即在用戶控制頁面中嵌入腳本而不是使用外部腳本文件。 謝謝大家的建議。 他們都非常有幫助。

修改后的js腳本如下,並且可以正常工作:

function showTextbox(objID) {
    var s = document.getElementById(objID);
    var div = document.getElementById("myDiv");
    if (s.options[s.selectedIndex].value == "Other") {
         div.style.display = "inline";
     }
     else {
         div.style.display = "none";
     }
}

嘗試使用ClientScriptManager.RegisterClientScriptInclude而不是 RegisterStartupScript。

在您的情況下,您似乎包含了一個外部 javascript 文件,而不是應該直接出現在頁面中的 javascript 代碼。

還可以嘗試將document.getElementById('<%=ddlInd.ClientID %>')中的雙引號 " 更改為單引號 '

編輯哦,我看到您正在嘗試在 javascript 文件中執行 <%=ddlIndustry.ClientID %> 。 這不會在外部 js 文件中解釋! 您應該將 function 直接包含在頁面中(而不是作為外部文件),或者嘗試將 ColntrolId 作為參數傳遞給 js function

嘗試將控件的 ClientIdMode 設置為 Predictable:

<asp:DropDownList ID="ddlInd" ClientIDMode="Predictable" runat="server" DataSourceID="indXmlDS" DataTextField="text" DataValueField="text"></asp:DropDownList>

您還可以通過使用ClientIDMode="Static"來使用 static ClientId,在這種情況下,ClientId 將等於控件的 id,因此您可以說:

document.getElementById("ddlInd");

您可以使用它來引用您的控件 to.js 文件

$('select#ddlInd').val(....)

如果下拉列表位於“ContentPlaceholder”內,您可以這樣做

$('select#ContentPlaceholderID_ddlInd').val(...)

將它放在 your.js 文件中

注意:當然包括 your.js 文件

如果你不能使用 .NET 4.0 並且卡在 3.5/2.0 上,我寫了一個名為 Awesome.ClientID 的小庫來解決這個問題。

我之前在這個答案中發布過: 如何讓這個 getElementsbyName 為 IE(和 FF)工作?

基本上,它將允許您將所有控件序列化為 JSON 數組,並且您可以將 JavaScript 更改為:

document.getElementById(controls.ddlInd);

該庫可以在這里找到: http://awesomeclientid.codeplex.com/

關於它的博客文章: http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-special-with-net-2-0/

您可以使用 <%=Control.ClientID %> 當您在.aspx 頁面上有腳本時,如果您使用外部文件,那么您必須使用控件 ID <%=ddlInd.ClientID %> 將不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM