从路径加载的javascript;如何使用document.getelementbyid

时间:2015-03-10 21:43:12

标签: javascript html asp.net frontend

`



function init() {
  var a = 'output of my processing';
  alert('I am here'); // alert pops up
  document.getElementById("<%=hdnField.ClientID %>").value = a;
}
&#13;
<head>
  <script src="../Scripts/myscripts.js"></script>
</head>

<body onload="init()">
  <asp:HiddenField ID="hdnField" runat="server" />
</body>
&#13;
&#13;
&#13;

`我有一个包含大量javascript的页面;我试图通过将脚本移动到脚本文件夹并引用路径来清理它;似乎工作正常,除非它遇到&#39; document.getelementbyid(controlname.id)&#39; - 它抛出&#39; TypeError:无法读取属性&#39; value&#39; of null&#39;

我知道它无法找到控件。为什么会这样?我认为DOM已经构建了 - 无论如何将javascript移动到路径上有什么区别?有关如何使其工作的任何想法?我真的很喜欢从页面移动javascript。

2 个答案:

答案 0 :(得分:1)

此答案假设您的目录结构正确无误。

将脚本标记移到正文的底部。 Here对这个问题是一个很好的答案,here是另一个问题。

此外,一般来说,从HTML元素内部调用JavaScript函数是不好的做法。如果你不使用jQuery,你可以添加一个&#34; DOMContentLoaded&#34;事件监听器来运行代码。使用jQuery,标准的$(document).ready()已被证明可以很好地工作。或者,如果您只是将脚本标记放在底部,并放置init();在JS文件的末尾,它将全部正常运行。这将是一个非常简单的应用程序,但简单性有时是最好的。

最后,为了进行健全性检查,您可以在init函数中对ID进行硬编码。我不了解asp.net,但您可能想检查&lt;%= hdnField.ClientID%&gt;的输出。您确定要获得正确的ID吗?

祝你好运。

答案 1 :(得分:1)

您在JS中使用ASP.Net内联调用。这可能不起作用,原因有两个:

  1. 您可能没有将服务器配置为使用ASP.Net处理器处理.js文件。
  2. 即使您这样做,.js的处理也将与托管.aspx页面完全分开;意思是hdnField不在范围内。
  3. 最好将有关页面上的项目的知识直接传递给JavaScript:

    JS:

    function init(config) {
        var a = 'output of my processing';
        alert('I am here'); // alert pops up
        document.getElementById(config.hdnFieldID).value = a;
    }
    

    ASPX:

    <head>
        <script src="../Scripts/myscripts.js"></script>
    </head>
    
    <body onload="init({ hdnFieldID: '<%= hdnField.ClientID %>' })">
        <asp:HiddenField ID="hdnField" runat="server" />
    </body>
    

    希望有所帮助。