我认为最好首先展示有问题的代码部分:
<script>
alert("check 1");
</script>
<script>
alert("check 2");
$("#exams").change(function(){
alert("prechanged");
var exam = $("#exams").val();
alert("changed");
alert("<%= examBoard.length %>");
<% for(var i=0;i<examBoard.length;i++){ %>
alert("got this far");
if(<%= examBoard[i].name %> == exam){
alert("got quite far");
<% for(var t=0;t<examBoard[i].modules.length;t++){ %>
$("#modules").append("<option value='<%= examBoard[i].modules[t].name %>'><%= examBoard[i].modules[t].name %></option>");
<% } %>
<% break; %>
}
<% } %>
$(document).ready(function() {
$('select').material_select();
});
});
</script>
此代码然后在运行时生成此输出(这当然是为了显示alert
框而被裁剪掉):
标题中描述的问题是它永远不会显示check 2
alert
框,也不会显示第二个alert
代码中的任何其他script
框。
我没有提供完整的上下文,因为我相信它只会极大地影响可读性并且不提供任何用处,但是如果我错了,这里是完整代码的Hastebin链接({{3 }})。
应该注意这是单击确定到check 1
警告框后在控制台中显示的错误,这是相当奇怪的,因为我现在必须检查我的代码中的语法十次,并且发现没有问题:
https://hastebin.com/atanusagij.xml
我不相信它所完成的事情的解释甚至是必要的,但我会提供一个,以防万一。实际上,具有标识select
的{{1}} html元素中的每个值都指向数据库中的项目,并且每个项目都嵌入了模块。因此,当用户从第一个exams
程序中选择一个考试时,然后更改select
中标识为select
的选项,以匹配数据库中考试项目中嵌入的模块。
答案 0 :(得分:0)
DOM在函数之前监听什么事件?您需要粘贴html代码以获得更清晰的信息。您可能还想使用单个脚本标记来运行所有JS代码。
答案 1 :(得分:0)
所以这里的答案有点做作,不幸的是,实际上会使代码效率降低但是当查看第二个script
标记时,<% break; %>
意味着代码永远不会到达if语句,导致出现错误。简单的解决方案是删除<% break; %>
,尽管有可能有更好的解决方案。