2010-04-20 45 views
0

我寫了一個簡單的JavaScript函數在一個aspx頁面微軟JScript運行時錯誤:所需的對象

function validate() 

{ 
if (document.getElementById("<%=tbName.ClientID%>").value=="") 
    { 
      alert("Name Feild can not be blank"); 
      document.getElementById("<%=tbName.ClientID%>").focus(); 
      return false; 
    } 
    if (document.getElementById("<%=ddlBranch.ClientID%>").value=="SelectBranch") 
    { 
      alert("Branch Should Be Selected"); 
      document.getElementById("<%=ddlBranch.ClientID%>").focus(); 
      return false; 
    } 

} 

一切正常驗證到各個領域。 後來我將它鏈接到像aspx頁面一樣的外部js文件。

頭RUNAT = 「服務器」>

SCRIPT SRC = 「validation.js」 類型= 「文本/ JavaScript的」>

/SCRIPT>

<title>Validations</title> 

/HEAD>

<form id="form" runat="server"> 



<asp:Label ID="lblName" runat="server" Text="Nmae: ">/asp:Label> 
<asp:TextBox ID="tbName" runat="server" Width="130px">/asp:TextBox> 

<asp:Label ID="lblBranch" runat="server" Text="Branch:">/asp:Label> 
    <asp:DropDownList ID="ddlBranch" runat="server" Width="107px"> 
     <asp:ListItem>CSE</asp:ListItem> 
     <asp:ListItem>ECE</asp:ListItem> 
     <asp:ListItem>CIVIL</asp:ListItem> 
     <asp:ListItem>MECH</asp:ListItem> 
     <asp:ListItem Selected="True" Value="SelectBranch">SelectBranch</asp:ListItem> 
    </asp:DropDownList>  
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="return validate(<%=tbName.ClientID%>, <%=ddlBranch.ClientID%>)" /> 

</form> 

在aspx.cs頁面

保護無效的Page_Load(對象發件人,EventArgs的)

{ 
    Page.RegisterClientScriptBlock("MyScript", "<SCRIPT Language='JavaScript' src='validation.js'></SCRIPT>"); 
    btnSubmit.Attributes.Add("onclick", "return validate()"); 

} 

現在,它給錯誤的 「Microsoft JScript運行時錯誤:所需的對象」。

我無法知道我出錯的地方。

回答

7

你的腳本只能在的aspx頁面內運行<%=tbName.ClientID%>是服務器端的邏輯是將字面客戶端ID輸出到客戶端,所以它看起來像在此之前,當在HTML渲染:

document.getElementById("tbName") 
//looks for <input id="tbName" /> 

現在看起來只是這樣的:

document.getElementById("<%=tbName.ClientID%>") 
//looks for <input id="<%=tbName.ClientID%>" /> ... doesn't exist :) 

因爲它不再尋找的對象/元素(因爲 ID不存在),你得到object required錯誤。你必須在頁面中保留這個邏輯,或者使用類等移動到其他方法。如果你正在做很多驗證,我會看看jQueryvalidation library


更新:下面是一個更容易讀爲您提供的意見完全文本形式的解決方案T.J.。如果你只是驗證了幾場,這是您的情況是最簡單的解決辦法:

function validate(nameId, branchId) { 
    if (document.getElementById(nameId).value=="") 
    { 
      alert("Name Feild can not be blank"); 
      document.getElementById(nameId).focus(); 
      return false; 
    } 
    if (document.getElementById(branchId).value=="SelectBranch") 
    { 
      alert("Branch Should Be Selected"); 
      document.getElementById(branchId).focus(); 
      return false; 
    } 
} 

在你的後臺代碼:

//Note your current method is deprecated after .Net 2.0+, should use this instead: 
//ClientScript.RegisterClientScriptInclude("validation", "validation.js"); 
Page.RegisterClientScriptBlock("MyScript", "<script type='text/javascript' src='validation.js'></script>"); 
btnSubmit.Attributes.Add("onclick", string.Format("return validate('{0}','{1}')", tbName.ClientID, ddlBranch.ClientID)); 
+1

@OP:如果你使用元素的ID來驗證函數的參數,例如'function validate(nameId,branchId)',然後使用'nameId'而不是''<%',你可以將它移動到它自己的文件中。 = tbName.ClientID%>「'和'branchId'而不是''<%= ddlBranch.ClientID%>」'(注意不再使用引號;例如'的document.getElementById(填充NameID).value')。然後,ASPX頁面中的腳本可以像這樣調用外部文件中的validate函數:'validate(「<%= tbName.ClientID%>」,「<%= ddlBranch.ClientID%>」)。 – 2010-04-20 12:25:43

+0

@ T.J。 - +1好的解決方案,只要它只有幾個可以完美管理的領域。 – 2010-04-20 12:27:39

+0

@ T.J。 - 增加了答案,使格式更容易閱讀 - 如果您從評論改變主意併發布自己的答案,我會刪除,只是@我所以我知道! – 2010-04-20 12:48:29

1

給對象要引用一個HTML id,這將想

<div id="myid"></div> 

輸出比可以通過

document.getElementById("myid") 
引用它
相關問題