微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以确定事件是否以编程方式触发?

如何解决是否可以确定事件是否以编程方式触发?

是否可以确定 inputblurchange 等事件是由于用户交互而触发的,还是使用 {{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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?