document.getelementbyid无法在母版页的内容页面中使用外部javascript

时间:2012-01-09 19:14:23

标签: javascript

调用asp文本框控件的外部javascript文件中的

在母版页中不起作用 例如,这是我在外部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>

contentplaceholder1:

<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执行名称文本框为空或在其中输入一些名称 请帮助我解决这个问题

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

不要忘记用</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&gt;&gt; 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);      
}

答案 2 :(得分:0)

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

Atlast我可以在经过多次试验和错误后得到解决方案......

这是我的代码。

.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;

我测试过这个并且工作得很好。

希望这可以帮助你...

答案 3 :(得分:0)

要在内容页面中放置控件ID

var name = document.getElementById(“&lt;%= myControlname.ClientID%&gt;”;;)

答案 4 :(得分:0)

我自己遇到了这个问题。我在控制台中看到一条错误消息:

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

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

PS:我会在Seth的回答中对此进行评论,但我在这个网站上没有足够的声望点。抱歉Stack Overflow :(