【问题标题】:Javascript not working within HTML pageJavascript 在 HTML 页面中不起作用
【发布时间】:2016-06-25 13:09:15
【问题描述】:

嘿,我有一个 HTML 页面,其中包含更新本地存储的这部分 javascript:

<script src="../../Website/json/modernizr.js" >
        var button = document.getElementById("btnsave");

        button.addEventListener("click", function(){
            if (Modernizr.localstorage) {
            // window.localStorage is available!
                var drinksElement = document.getElementById("drinks");

                for (var i = 0; i < drinksElement.length-1; i++) {
                    localStorage["box" + i] = drinksElement[i].value;
                }
            } else {
                // no native support for HTML5 storage :(
            }
        });        
</script>  

但由于某种原因,它没有做它应该做的事情。该页面加载正常,在控制台上没有出现任何错误。如果我将此脚本复制并粘贴到开发人员控制台中,然后单击按钮更新本地存储,本地存储会更新,但只有一次,然后似乎“忘记”了这个javascript函数。如果我将其复制并粘贴到控制台中,然后键入“按钮”,它将显示按钮变量。我可以继续输入“按钮”,它会一直显示按钮变量,直到我单击按钮并更新本地存储。之后,再次调用按钮返回引用未定义错误。

在此先感谢,这让我困扰了很长时间。

【问题讨论】:

  • 粘贴返回的确切错误。
  • 这是返回的错误:VM120:1 Uncaught ReferenceError: button is not defined at :1:1 如果我将脚本复制并粘贴到控制台中,我不会收到此错误虽然

标签: javascript html google-chrome


【解决方案1】:

您的 modernizr 引用和 javascript 代码应位于不同的脚本标记中。

<script src="../../Website/json/modernizr.js" ></script> 
<script> 
        var button = document.getElementById("btnsave");

        button.addEventListener("click", function(){
            if (Modernizr.localstorage) {
            // window.localStorage is available!
                var drinksElement = document.getElementById("drinks");

                for (var i = 0; i < drinksElement.length-1; i++) {
                    localStorage["box" + i] = drinksElement[i].value;
                }
            } else {
                // no native support for HTML5 storage :(
            }
        });        
</script> 

根据规范 - &lt;script&gt;

如果有 src 属性,则该元素必须为空或仅包含也符合脚本内容限制的脚本文档。

另外,根据@QuasimodosClone然而,它被不理解&lt;script&gt;标签的用户代理显示为简单的HTML内容

【讨论】:

  • 我不敢相信我完全忽略了这一点!非常感谢。有时让别人审查代码真的很有帮助。
  • 一开始我也错过了。 :)。发生。如果有帮助请采纳答案
  • 为了成为对世界的好回答,应该说明的是,&lt;script src="..."&gt; some content &lt;/script&gt; 之间的内容由于给定的src 属性而永远不会被执行。然而,它被不理解&lt;script&gt;标签的用户代理显示为简单的HTML内容。所以可以在那里写“你的浏览器不支持脚本”之类的东西。
  • 嗯,我认为 很明显提问者知道这一点。我仍然会将它添加到 asnwer 中。感谢您的建议。
猜你喜欢
  • 2019-09-14
  • 2019-08-10
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2018-03-10
相关资源
最近更新 更多