我的JavaScript作为内联代码工作,但不是包含文件。你知道为什么以及如何修复它吗?

我的JavaScript作为内联代码工作,但不是包含文件。你知道为什么以及如何修复它吗?,javascript,html,Javascript,Html,我有以下表格: <form id="searchForm" class="search_field" method="get" action=""> ... ... </form> 有没有办法解决这个问题 还有一点信息,上面显示的js代码在一个名为main.js的文件中,该文件位于一个名为js的文件夹中,而js位于一个名为Views的文件夹中。这个 当您在同一页面中包含JavaScript代码时,请提前多谢,它与表单元素的关系在哪里?(之前还是之后?)在引用外部Java

我有以下表格:

<form id="searchForm" class="search_field" method="get" action="">
...
...
</form>
有没有办法解决这个问题

还有一点信息,上面显示的js代码在一个名为main.js的文件中,该文件位于一个名为js的文件夹中,而js位于一个名为Views的文件夹中。这个
当您在同一页面中包含JavaScript代码时,请提前多谢,它与
表单
元素的关系在哪里?(之前还是之后?)在引用外部JavaScript文件时如何

我猜在前一种情况下,代码在文件的末尾,而在后一种情况下,
script
reference标记在文件的开头

如果这是真的,那么发生的事情是在DOM准备就绪之前执行以下代码:

var form = document.getElementById("searchForm");
form.doSearch1.onclick = searchPage;
form.doSearch2.onclick = searchPage;

如果
表单
标记尚未呈现给DOM,那么第一行将找不到任何内容,随后的行将因此失败。一种方法是将
脚本
引用标记放在末尾,但这对我来说似乎是一种攻击。有时有很好的理由将它们保留在页眉中,在许多情况下,不仅仅是更干净地管理代码

我们应该同时做这两件事——将脚本移到底部(作为最佳实践,而不是解决此问题的方法),并使用document.ready当js与表单元素位于同一页面时,它位于表单元素下方:。。。当作为外部文件引用时,它位于head:then form元素之间。有一堆js文件引用。@ChidiOkeh:那确实会导致错误。如果JavaScript在
表单
元素添加到DOM之前被评估,那么它将无法找到该元素。它需要等待DOM准备就绪,或者需要在
表单
标记之后执行。@David,谢谢。那么解决办法是什么呢。boss不想要内联js代码。@ChidiOkeh:要么在HTML末尾包含引用外部JavaScript文件的
脚本
标记,要么将代码包装到一个函数中,等待DOM加载后再执行。(这与jQuery无关,我所链接的问题讨论了如何在没有jQuery的情况下实现它。)
<script type="text/javascript" src="Views/JS/main.js"></script>
form.doSearch1.onclick = searchPage;
form.doSearch2.onclick = searchPage;
var form = document.getElementById("searchForm");
form.doSearch1.onclick = searchPage;
form.doSearch2.onclick = searchPage;