[英]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内联调用。 这不能工作,原因有两个:
您最好将有关页面上项目的知识直接传递给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.