微软JScript运行时错误:所需的对象
问题描述:
我写了一个简单的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运行时错误:所需的对象”。
我无法知道我出错的地方。
答
你的脚本只能在的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和validation 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));
答
给对象要引用一个HTML id,这将想
<div id="myid"></div>
输出比可以通过
document.getElementById("myid")
引用它
@OP:如果你使用元素的ID来验证函数的参数,例如'function validate(nameId,branchId)',然后使用'nameId'而不是''“'和'branchId'而不是''”'(注意不再使用引号;例如'的document.getElementById(填充NameID).value')。然后,ASPX页面中的脚本可以像这样调用外部文件中的validate函数:'validate(“”,“”)。 – 2010-04-20 12:25:43
@ T.J。 - +1好的解决方案,只要它只有几个可以完美管理的领域。 – 2010-04-20 12:27:39
@ T.J。 - 增加了答案,使格式更容易阅读 - 如果您从评论改变主意并发布自己的答案,我会删除,只是@我所以我知道! – 2010-04-20 12:48:29