Microsoft JScript运行时错误:需要对象

时间:2010-04-20 12:15:30

标签: javascript

我写了一个简单的javascript函数来验证aspx页面中的字段

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文件一样。

head runat =“server”&gt;

script src =“validation.js”type =“text / javascript”&gt;

/脚本&GT;

<title>Validations</title>

/头&GT;

<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页面

protected void Page_Load(object sender,EventArgs e)

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

}

现在给出错误“Microsoft JScript运行时错误:需要对象”。

我无法知道我哪里出错了。

2 个答案:

答案 0 :(得分: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错误。您必须在页面中保留此逻辑,或者使用类等转移到其他方法。如果您正在进行大量验证,我会查看jQuery和{{3} }。


更新:以下是以全文形式为您提供的解决方案validation library,以便于阅读。如果您只验证几个字段,这是最简单的解决方案:

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 :(得分:1)

给你想引用一个html id的对象,它将输出像

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

比你可以参考

document.getElementById("myid")