如何解决是否可以确定事件是否以编程方式触发?
是否可以确定 input
、blur
、change
等事件是由于用户交互而触发的,还是使用 {{1} 以编程方式触发的? } 等等?
我面临的问题是第三方 UI 库注册了一个事件处理程序,它侦听 inputElement.dispatchEvent(new Event('change'))
并在输入元素为空时更改其外观。我有一个自己的 blur
处理程序,如果满足某些条件,它会清空输入。由于我的事件处理程序在库之后执行,库没有注意到输入现在是空的,重新抛出模糊事件会导致无限循环。
blur
document.getElementById('input').addEventListener('blur',event => {
if (event.myOwnCustomProperty !== true) {
event.target.value = ''
const customEvent = new Event('blur')
customEvent.myOwnCustomProperty = true
event.target.dispatchEvent(customEvent)
}
})
解决方法
您可以使用事件的 isTrusted
属性来检查它是否由用户交互触发:
isTrusted
接口的 Event
只读属性是 Boolean
,当事件由用户操作生成时为 true
,{{1} } 当事件由脚本创建或修改或通过 false
调度时。
EventTarget.dispatchEvent()
请注意,用户仍然可以手动或以编程方式从调试器触发事件,在这种情况下,您永远不会知道事件的来源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。