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 属性 'value' of null'
我知道它无法找到控件。为什么会这样?我认为 DOM 已经构建 - 将 javascript 移动到路径有什么区别呢?关于如何使其工作的任何想法?我真的很想 javascript 从页面中移走。
此答案假定您的目录结构是正确的。
将您的脚本标签移到正文底部,就在 之前。 Here is a good SO answer to this question, and here 是另一个。
此外,一般来说,从 HTML 元素内部调用 JavaScript 函数是不好的做法。如果您不使用 jQuery,您可以将 "DOMContentLoaded" 事件侦听器添加到 运行 代码。使用 jQuery,标准 $(document).ready() 已被证明可以正常工作。或者,如果您只是将脚本标记放在 的底部,然后放置 init();在你的 JS 文件的末尾,它将全部 运行 正确。这适用于非常简单的应用程序,但有时简单是最好的。
最后,为了进行完整性检查,您可以在 init 函数中对 ID 进行硬编码。我不知道 asp.net,但您可能想检查 <%=hdnField.ClientID %> 的输出。你确定你得到的是正确的ID吗?
祝你好运。
您正在 JS 中使用 ASP.Net 内联调用。这行不通,原因有二:
- 您的服务器可能没有配置为使用 ASP.Net 处理器处理 .js 文件。
- 即使这样做,.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>
希望对您有所帮助。
`
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 属性 'value' of null'
我知道它无法找到控件。为什么会这样?我认为 DOM 已经构建 - 将 javascript 移动到路径有什么区别呢?关于如何使其工作的任何想法?我真的很想 javascript 从页面中移走。
此答案假定您的目录结构是正确的。
将您的脚本标签移到正文底部,就在 之前。 Here is a good SO answer to this question, and here 是另一个。
此外,一般来说,从 HTML 元素内部调用 JavaScript 函数是不好的做法。如果您不使用 jQuery,您可以将 "DOMContentLoaded" 事件侦听器添加到 运行 代码。使用 jQuery,标准 $(document).ready() 已被证明可以正常工作。或者,如果您只是将脚本标记放在 的底部,然后放置 init();在你的 JS 文件的末尾,它将全部 运行 正确。这适用于非常简单的应用程序,但有时简单是最好的。
最后,为了进行完整性检查,您可以在 init 函数中对 ID 进行硬编码。我不知道 asp.net,但您可能想检查 <%=hdnField.ClientID %> 的输出。你确定你得到的是正确的ID吗?
祝你好运。
您正在 JS 中使用 ASP.Net 内联调用。这行不通,原因有二:
- 您的服务器可能没有配置为使用 ASP.Net 处理器处理 .js 文件。
- 即使这样做,.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>
希望对您有所帮助。