如何解决当CSS ID覆盖它们时,访问在全局范围内定义的js函数
给出此html文档:
<script>
const testfn = (e) => {
e.preventDefault();
console.log(e);
}
</script>
<form onsubmit='testfn(event)'>
<input id='testfn'>
<button type='submit'>submit</button>
</form>
如何使用脚本标记中定义的testfn
事件处理程序?
(onsubmit处理程序中的范围内testfn
是输入元素,因为它具有匹配的ID)
编辑:
虽然有趣的是,仅当此问题以某种形式出现并且
- 具有id的元素是
input
元素 - 带有附加事件处理程序的元素也是
input
类的元素:输入,按钮或表单的onsubmit
鉴于这就是可能的方式,也许对于体育运动,更好的问题是:有什么方法仍然可以从输入的onsubmit / click属性访问javascript函数?
解决方法
有两种基本的解决方法。
请勿使用内部事件属性
正如您所发现的那样,它们确实将讨厌的事情范围化了。将事件处理程序与JS绑定。
document.querySelector("form").addEventListener("submit",testfn);
通过window
对象访问全局
为此,首先必须将函数附加到window对象。用var
而不是const
声明它。
var testfn = etc;
然后您可以访问:
onsubmit="window.testfn(event)"
我建议采用前一种方法。
可笑的是,此问题仅在以某种形式发生时才会发生
这是由于多种因素造成的。内在事件属性搜索它们所绑定的事件的属性,然后将具有ID的控件放入表单中,从而在与ID匹配的表单上为该元素提供访问器属性。
因此<form onsubmit='testfn(event)'>
最终访问了theForm.testfn
这是输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。