脚本标记未正常运行

时间:2017-08-29 21:39:43

标签: javascript jquery html node.js ejs

我认为最好首先展示有问题的代码部分:

<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框而被裁剪掉):

enter image description here

标题中描述的问题是它永远不会显示check 2 alert框,也不会显示第二个alert代码中的任何其他script框。

我没有提供完整的上下文,因为我相信它只会极大地影响可读性并且不提供任何用处,但是如果我错了,这里是完整代码的Hastebin链接({{3 }})。

应该注意这是单击确定到check 1警告框后在控制台中显示的错误,这是相当奇怪的,因为我现在必须检查我的代码中的语法十次,并且发现没有问题:

https://hastebin.com/atanusagij.xml enter image description here

我不相信它所完成的事情的解释甚至是必要的,但我会提供一个,以防万一。实际上,具有标识select的{​​{1}} html元素中的每个值都指向数据库中的项目,并且每个项目都嵌入了模块。因此,当用户从第一个exams程序中选择一个考试时,然后更改select中标识为select的选项,以匹配数据库中考试项目中嵌入的模块。

2 个答案:

答案 0 :(得分:0)

DOM在函数之前监听什么事件?您需要粘贴html代码以获得更清晰的信息。您可能还想使用单个脚本标记来运行所有JS代码。

答案 1 :(得分:0)

所以这里的答案有点做作,不幸的是,实际上会使代码效率降低但是当查看第二个script标记时,<% break; %>意味着代码永远不会到达if语句,导致出现错误。简单的解决方案是删除<% break; %>,尽管有可能有更好的解决方案。