2012-12-20 65 views
0

我的document.getElementById函數在我知道存在的值上返回null。具體來說,我嘗試:使用document.getElementById在外部JavaScript文件中驗證表單

//in an external .js file 
var UserName = document.getElementById('<%=_username.ClientID%>'); 

並使用一些條件進行測試,因爲元素id值爲null,所以不會發生這種情況。我定義_username在這裏用戶控制文件:

... 
<fieldset class="login"> 
    <legend class="login">Login</legend> 
    <label for="<%=_username.ClientID%>"> 
     User Name:</label> 
    <asp:TextBox ID="_username" runat="server" CssClass="login" /> 
    <label for="<%=_password.ClientID%>"> 
     Password:</label> 
    <asp:TextBox ID="_password" runat="server" CssClass="login" TextMode="Password" /> 
    <br /> 
    <span class="response"> 
     <asp:Literal ID="_response" runat="server" /></span>   
    <asp:Button ID="_login" runat="server" Text="Login"/> 
</fieldset> 

我驗證了我的網頁通過測試,不需要使用的getElementById()的一個簡單的函數聽JavaScript文件。

+0

你有一個js文件中的asp.net代碼? js文件是由asp.net解析的嗎? – Musa

+1

@Musa JS文件不被ASP.NET分析。 –

回答

0

假設你說的是真的,其餘的問題是最有可能的

var UserName = document.getElementById('<%=_username.ClientID%>'); 

是越來越運行之前DOM就緒。嘗試將此腳本移至body部分的末尾,以確保在運行之前球機已準備就緒。

<script type='text/javascript'> 
     // rest of script 
     var UserName = document.getElementById('<%=_username.ClientID%>'); 
     // rest of script 
    </script> 
</body> 
+0

我記得在另一個線程中讀到類似的響應,但我試圖用外部腳本文件來完成此操作。我在HTML的頭部調用src;這仍然會導致DOM問題? – Nibirue

+0

@Nibirue - 對此不太確定,但我認爲*您可能可以將該腳本標記移動到上面的身體末端。 '

0

你的標題說, 「外部JavaScript文件」。如果這是在外部JavaScript文件:

var UserName = document.getElementById('<%=_username.ClientID%>'); 

這不會起作用,因爲<%= %>符號不JS文件,僅ASPX或ASCX工作。

+0

這是有道理的;什麼是另類然後檢索_username – Nibirue

+0

ClientID的如果你能保證這正是_username在客戶端上,而不是ct100_contentplaceholder__username,那麼你可以硬? -code _username。否則,你可以把代碼放在ASP.NET的上面,然後你的腳本可以引用UserName變量(只要腳本是在變量的創建之下定義的)。 –