未捕获的ReferenceError:未定义[functionName]

时间:2014-12-24 14:02:32

标签: javascript html

真诚道歉,如果已经涵盖了这一点。我一直在拖网StackOverflow一段时间,我找不到任何可以解决我的问题的东西。很多人都有这个错误,但他们似乎是从语法错误和类似的东西中衍生出来的。我(也不是JSLint)找不到任何这样的错误,所以我很难过。 以下代码(来自W3Schools页面)确实有效:

<p>Click the button to trigger a function that will output "Hello World" in a p element with id="demo".</p>
<button onclick="myFunction()">Click me</button>
<p id="demo"></p>
<script>
function myFunction() {
  document.getElementById("demo").innerHTML = "Hello World";
}
</script>

但是,我的代码不起作用:

  <head>
  <!--SNIP-->
  <script language="text/javascript">
    function iconclicked() {
      alert("Yay!");
    }
  </script>
  </head>
  <body>
    <div class="icon" id="misc" onclick="iconclicked()"></div>
  </body>

这会产生“未捕获的ReferenceError:iconclicked未定义”错误。 但是,如果我错了,请纠正我,function iconclicked() {...}是定义函数的东西,它显然存在。此外,将JScript移动到<body>标记内并不能解决问题,无论脚本是在div之前还是之后。如果您要将div替换为另一个元素(按钮,图像,文本等)或以不同的方式调用该函数(例如通过onload),则代码不起作用。

我想也许是我页面上剩下的代码会导致一些有趣的事情发生,所以我转向JSFIDDLE并在那里弹出旧的W3Schools代码。瞧,“Uncaught ReferenceError: myFunction is not defined”。 JSFDDLE link 编辑:事实证明这只是因为我没有在JSFIDDLE选项中选择“无包装” - 感谢Peter Healy:)

但是如果你继续将JS <script> </script>标记放在JSFIDDLE的HTML部分中,那么就没有这样的问题,并且代码按预期工作。 JSFIDDLE link

我想也许这是一个范围问题,但我不能为我的生活弄清楚具体是什么。希望有更多经验的人有答案!

3 个答案:

答案 0 :(得分:3)

没有&#34; text / javascript&#34;的语言,这就是类型。

更改

<script language="text/javascript">

<script>

不要担心语言或类型属性。语言已被弃用。

答案 1 :(得分:3)

实际上是<script type="text/javascript">type属性,而不是language

  <head>
  <!--SNIP-->
  <script type="text/javascript">
    function iconclicked() {
      alert("Yay!");
    }
  </script>
  </head>
  <body>
    <div class="icon" id="misc" onclick="iconclicked()"></div>
  </body>

language属性不久前已经过时了。

答案 2 :(得分:0)

这就是JSFiddle如何包装你的JS。在左侧选择No Wrap选项将为您解决。

请在此处阅读:no wrap

修改:删除文字/ javascript