2013-07-18 128 views
3

這裏是例子: abcd.aspx無法獲取ASP的值:外部文本框的javascript文件

<asp:TextBox ID="txtFName" runat="server" ></asp:TextBox> 

<asp:Button ID="btnLogin" runat="server" Text="Login" 
onclick="btnLogin_Click" OnClientClick = "loginAlert()" /> 

javascriptfile.js

function loginAlert() { 
var name = document.getElementById('<% txtFName.ClientID %>').value; 
alert(name); 

}

鏈接到.aspx頁面上的JavaScript文件

<script src="../../JSfiles/javascriptfile.js" type="text/javascript"></script> 

這裏的名字沒有出現在彈出框中。

+0

而且也這段JavaScript代碼工作很好,如果我把javascript代碼放在使用腳本標籤的aspx頁面中。我不明白爲什麼這不工作時,我使用外部JavaScript文件。請建議我。謝謝。 – link2jagann

回答

2

您不能在正常文件(如javascriptfile.js)內使用代碼塊(<%%>),因爲它們不以任何方式被ASP.NET解釋。你可以做的是把文本框的ID傳遞給函數:

function loginAlert(ctrl) { 
    var name = document.getElementById(ctrl).value; 
    alert(name); 
} 

然後標記將類似於以下內容:

<asp:Button ID="btnLogin" runat="server" Text="Login" 
    OnClick="btnLogin_Click" OnClientClick="loginAlert('<%=txtFName.ClientID%>')" /> 

UPDATE

我沒注意這樣一個事實,像<%=...%>這樣的構造在服務器端控件聲明中不起作用(因爲在頁面編譯時它們基本上轉換爲Response.Write語句)。解決此問題的方法至少有兩種:

您可以對全局可用的名稱文本框的DOM元素進行引用。您的標記將如下所示:

<script type="text/javascript"> 
    var loginNameId = '<%=txtFName.ClientID%>';  
</script> 

<asp:Button ID="btnLogin" runat="server" Text="Login" 
    OnClick="btnLogin_Click" OnClientClick="loginAlert()" /> 

而且你loginAlert將如下所示:

function loginAlert() { 
    var name = document.getElementById(loginNameId).value; 
    alert(name); 
} 

我個人,因爲你污染與變量的全局命名空間不喜歡這樣的解決方案,它不是一般非常優雅。

或者,您可以將數據屬性與ASP.NET數據綁定一起使用。

標記:

<asp:Button ID="btnLogin" data-name='<%# txtFName.ClientID %>' runat="server" Text="Login" 
    OnClick="btnLogin_Click" OnClientClick="loginAlert(this)" /> 

的JavaScript:

function loginAlert(ctrl) { 
    var name = document.getElementById(ctrl.readAttribute('data-name')).value; 
    alert(name); 
} 

代碼隱藏:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    DataBind(); 
} 
+1

我不認爲'<%= txtFName.ClientID%>'在服務器控制聲明中是允許的。 –

+0

@SteveB你是絕對正確的,我已經更新了我的答案。 – volpav

1

標記在JS文件<% %>不會工作。如果你把它放在<script type='text/javascript'>...</script>裏的aspx頁面上,那麼它就會工作。

更新:

如果你想獲得客戶端ID,那麼你可以把它從後面的代碼在一個變量登記,如:

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "JsVariables", "var txtboxClientId='" + txtFName.ClientID + "';", true); 

和js文件使用:

function loginAlert() { 
var name = document.getElementById(txtboxClientId).value; 
alert(name); 
} 
1

JavaScript文件不是由ASP.Net解析器提供的。因此,<% %>被忽略並按原樣輸出。

的simpliest方法是提供ID作爲參數:

<asp:TextBox ID="txtFName" runat="server" ></asp:TextBox> 

<asp:Button ID="btnLogin" runat="server" Text="Login" 
onclick="btnLogin_Click" /> 

後面的代碼:

btnLogin.OnClientClick = string.Format("loginAlert('{0}')", txtFName.ClientID); 

,並在js文件:

function loginAlert(txtId) { 
var name = document.getElementById(txtId).value; 
alert(name); 
}