繁体   English   中英

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

[英]javascript loaded from a path; how to use document.getelementbyid

`

 function init() { var a = 'output of my processing'; alert('I am here'); // alert pops up document.getElementById("<%=hdnField.ClientID %>").value = a; } 
 <head> <script src="../Scripts/myscripts.js"></script> </head> <body onload="init()"> <asp:HiddenField ID="hdnField" runat="server" /> </body> 

`我的页面上有很多JavaScript; 我试图通过将脚本移动到脚本文件夹并引用路径来清理它; 似乎工作正常,除非遇到'document.getelementbyid(controlname.id)'-抛出'TypeError:Cannot read property'value'of null'

我了解它找不到控件。 为什么会这样呢? 我以为DOM已经建立了-将javascript移到路径上到底有什么区别? 关于如何使其运作的任何想法? 我真的希望将javascript从页面中移出。

该答案假定您的目录结构正确。

将您的脚本标签移到正文底部,就在之前。 这里是一个很好的SO回答这个问题, 这里是另一回事。

另外,通常,从HTML元素内部调用JavaScript函数是一种不好的做法。 如果您不使用jQuery,则可以添加“ DOMContentLoaded”事件侦听器以运行代码。 使用jQuery,标准的$(document).ready()已被证明可以很好地工作。 或者,如果您只是将脚本标签放在的底部,然后将init(); 在您的JS文件的末尾,它将全部正常运行。 这将是一个非常简单的应用程序,但是有时最好是简单性。

最后,为了进行完整性检查,您可以将ID硬编码到init函数中。 我不知道asp.net,但您可能要检查<%= hdnField.ClientID%>的输出。 您确定获得正确的ID吗?

祝好运。

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

  1. 您可能没有将服务器配置为使用ASP.Net处理器处理.js文件。
  2. 即使您这样做,.js的处理也将与托管.aspx页完全分开; 表示hdnField不在范围内。

您最好将有关页面上项目的知识直接传递给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>

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM