【问题标题】:javascript loaded from a path; how to use document.getelementbyid从路径加载的javascript;如何使用 document.getelementbyid
【发布时间】:2015-03-10 21:43:12
【问题描述】:

`

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:无法读取属性'value' of null'

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

【问题讨论】:

  • 你能发布你的代码,包括 HTML 和 JS 吗?
  • 我刚刚做了,最简单的形式。

标签: javascript html asp.net frontend


【解决方案1】:

您在 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>

希望对您有所帮助。

【讨论】:

    【解决方案2】:

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

    将你的脚本标签移动到正文的底部,就在 . Here 是这个问题的一个很好的答案,here 是另一个。

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

    最后,为了进行完整性检查,您可以在 init 函数中对 ID 进行硬编码。我不知道 asp.net,但您可能想检查 的输出。你确定你得到了正确的ID?

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2021-07-14
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      相关资源
      最近更新 更多