您不能在正常文件(如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();
}
而且也這段JavaScript代碼工作很好,如果我把javascript代碼放在使用腳本標籤的aspx頁面中。我不明白爲什麼這不工作時,我使用外部JavaScript文件。請建議我。謝謝。 – link2jagann