表单中的命名元素如何干扰全局名称空间?

扬·图罗ň

有此代码

<script>
function faul() { alert("faul"); }
</script>

<form>
  <button onclick="faul()">action</button>
  <input name="faul" required>
</form>

单击按钮会导致faul is not a function,但是当按钮在表单外部或在调用onclick="window.faul()"函数时被调用时。

请解释冲突。

康斯坦丁·格罗斯

如果您console.log(faul)在点击处理程序中执行,则会看到它faul是对具有相同名称的输入的全局引用。

原因是出于历史原因,(大多数(如果不是全部)浏览器)会通过使具有name属性的任何元素用作该名称的引用来污染运行表单元素的内联事件处理程序的范围。顺便说一句,对于具有id属性的任何元素,在全局范围内也是如此(如下所示)。

使用addEventListener()而不是inline属性添加处理程序将避免此问题(下面还将进行演示)。

document.querySelector('form button').addEventListener('click', function() {
  console.log('from addEventListener handler: ', faul);
});
<script>
function faul() { alert("faul"); }
</script>

<form>
  <button onclick="console.log('from inline handler:', faul)">log faul</button>
  <button onclick="console.log(faul2)">log faul2</button>
  <input name="faul" required>
  <div id="faul2"></div>
</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 PHP Xpath 中获取带有命名空间前缀的元素名称

如何从Typescript中的全局命名空间中明确标识实体?

__del __()如何干扰垃圾回收?

如何引用全局名称空间

如何在命名空间元素中定义非命名空间元素?

Clojure:如何将表单绑定到全局javascript名称空间?

如何从命名空间元素中检索属性

如何在Xamarin表单中添加多个名称空间?

Rails中的命名空间表单对象

如何使线程运行而不会受到任何干扰

如何在匿名类定义中命名空间常量的名称空间?

如何使用XmlWriter在元素中编写名称空间

如何在Schematron中组合名称空间和元素的路径?

如何从命名向量中按名称删除元素?

从 JMS 消息中获取命名空间名称

模型名称中的NSwag命名空间

为什么“ #define A”会干扰“命名空间A {}”?

如何将模块中的类公开给TypeScript中的全局名称空间?

如何获取命名空间的元素的属性

删除元素中的xsi命名空间

从具有相同名称的未命名命名空间中的函数调用全局函数

在Clojure中,如何定义可以从其他名称空间访问的全局变量

如何使用名称空间类在Jinja2中使用全局变量?

如果全局变量中存在相同的变量,如何访问匿名名称空间变量

如何将命名空间的mapGetters与全局getter混合使用?

如何为全局命名空间中的类提供swap()?

Javascript中的全局命名空间:迁移到TypeScript

全局命名空间函数在命名空间类构造函数中不可用

包名称的命名空间