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

时间:2021-06-30 17:58:33

标签: javascript dom-events

是否可以确定 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)
  }
})

1 个答案:

答案 0 :(得分:2)

您可以使用事件的 isTrusted 属性来检查它是否由用户交互触发:

<块引用>

isTrusted 接口的 Event 只读属性是 Boolean,当事件由用户操作生成时为 true,{{1} } 当事件由脚本创建或修改或通过 false 调度时。

EventTarget.dispatchEvent()

请注意,用户仍然可以手动或以编程方式从调试器触发事件​​,在这种情况下,您永远不会知道事件的来源。