document.getelementbyid在母版页内容页的外部javascript中不起作用

document.getelementbyid is not working in external javascript in content page of master page

本文关键字:外部 javascript 不起作用 getelementbyid 母版页 document      更新时间:2023-09-26

在外部javascript文件中调用asp文本框控件在母版页中不起作用
例如,这是我在外部js文件中的代码

 function name_valid()
 {
  var a=document.getElementById("name_box");
  if(a==null || a=="")
  {
   alert('Enter the name');
  }
  var b=document.getElementById("dob_box");
  if( b==null || b=="")
  {
   alert('Enter the Date Of Birth');
  }
 }

内容页:内容占位符(头):

<script  src="valid.js" type="text/javascript" language="javascript"  ></script>

内容占位符1:

<asp:TextBox ID="name_box" runat="server" ></asp:TextBox>
<asp:Textbox Id="dob_box" runat="server"></asp:TextBox>
<asp:Button ID="submit_button" runat="server" Text="Submit" OnClientClick="name_valid()"/>

在这里,javascript要么执行名称文本框为空,要么在其中输入一些名称请帮我解决这个问题

确保在HTML之后加载JavaScript文件。可能是您的JavaScript试图在ID存在于页面中之前引用该ID。

或者确保JavaScript在文档准备好后执行。如果你没有使用库,你应该看看jQuery是如何做到的。

别忘了用</script> 关闭你的js标签

首先,你没有说明var a.

你有没有试着把这个函数放在你的页面上进行测试?

content place holder(head):
<script type="text/javascript" language="javascript">
       // your function
</script>

最后,不要使用ASP代码,但我不认为document.getElementById("dob_box");会返回输入的值,请使用document.getElementById("dob_box").value;

//编辑:

看起来,使用ASP脚本,输入的名称(和/或id)会发生变化,比如

do_box>>ctl00_ContentPlaceHolder_do_box

您可能知道为测试它们而生成的真实名称/id输入。所以你应该做一些类似的事情来了解他们:

function name_valid()
{
    var values=null;
    for(id in document.forms[0].elements)
    {
        realName=document.forms[0].elements[id].name;
        realId=document.forms[0].elements[id].id;
        value=document.forms[0].elements[id].value;
        values+=id+' : '+realId+' : '+realName+' : '+value+''n';
    }
    alert(values);      
}

即使我在从外部javascript获取母版页控件id时也遇到了同样的问题。。。

至少我可以在经历了很多尝试和错误之后得到解决方案。。。

这是我的密码。

.aspx页面中,

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">                          
    <script type="text/javascript" language="javascript" src="Scripts/JScript.js">
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="BodyContent" Runat="Server">
    <asp:TextBox ID="txtEmployeeNumber" runat="server" ClientIDMode="Static">
    </asp:TextBox>
</asp:Content>

添加控件后,运行页面并查看视图源。。。检查该视图源中的表单id。

我的表单id是ctl01

JScript.js中,调用类似的文本框id

var txtEmployeeNumber = document.forms.ctl01.elements.ctl00$BodyContent$txtEmployeeNumber.value;

我测试了这个,工作非常好。

希望这能帮助你。。。

获取放置在内容页面内的控件id

var name=document.getElementById("<%=myControlname.ClientID%>";)

我自己也遇到过这个问题。我在控制台上收到一条错误消息,上面写着:

"TypeError: document.getElementById(...) is null" 

你有这个错误吗?如果是这样的话,您的页面还没有生成HTML,您需要将JS链接放在HTML之后。

附言:我本来会在赛斯的回答下对此发表评论,但我在这个网站上没有足够的信誉点。抱歉堆栈溢出:(