未捕获的类型错误:lang 不是函数[重复]

2024-05-26

在我的 HTML 中我定义了lang函数在script标签并添加“试射!”必须调用的按钮lang点击时:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Testing Functions</title>
  <script type="text/javascript">
    function lang() {
      alert("Hello, World! It's JavaScript this time");
    }
  </script>
</head>

<body>
  <form action="">
    <input type="button" value="Test Fire!" onclick="lang();">
  </form>
</body>

</html>

但是,如果我单击该按钮,我会收到此错误:

未捕获的类型错误:lang不是一个函数

但是如果我将函数名称更改为lang对于其他任何事情,这段代码都可以正常工作。


考虑这段代码:

<input type="button" value="Debugger Test" onclick="debugger;" />
<input type="button" value="Prototype Test" onclick="console.log(__proto__);" />

当您单击“调试器测试”并打开调试器时,您会看到似乎有一个隐式的with范围围绕onclick,使得所有的<input>的属性无需引用按钮即可访问。

单击“原型测试”会记录当前范围的原型。你会发现这是HTMLInputElement的原型,使所有scopable https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables整个原型链的属性可供该范围使用。

有趣的是,当前原型链的范围部分HTMLDocument也包括在内。

所有这一切意味着所有全局属性(lang是其中之一),并且其他几个特定于按钮的按钮被覆盖。例如。value, type也不行。同样,变量如createElement (from document) 也行不通,但是不可作用域append (from ParentNode.prototype) would.

这一切也都在这篇文章中得到了解释回答相关问题 https://stackoverflow.com/a/51062916/4642212关于全局变量与冲突window特性。


最好的选择是使用添加事件侦听器的标准方法:addEventListener https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Inline_event_handlers_%E2%80%94_don't_use_these.

<input type="button" value="Test" />
<script>
  function lang() {
    alert("Hello, World! It’s not an HTML event handler attribute this time");
  }

  document.querySelector("input").addEventListener("click", lang);
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未捕获的类型错误:lang 不是函数[重复] 的相关文章

随机推荐