【问题标题】:dispatchEvent 'mouseover' not workingdispatchEvent“鼠标悬停”不起作用
【发布时间】:2015-09-03 16:43:23
【问题描述】:

我有以下代码http://jsfiddle.net/yc7sj3pt/2/

document.getElementById('obj_one').addEventListener('mouseover', function(){
    var e = document.createEvent('HTMLEvents');
    e.initEvent('mouseover', true, false);

    document.getElementById('obj_two').dispatchEvent(e);
    console.log('hover');
}, false);

当我在mouseover#obj_one 时,我试图让#obj_two 对悬停做出反应(从而变为红色),但它不起作用。我做错了什么?

【问题讨论】:

  • 为什么不添加一个类并以这种方式进行样式设置?
  • @JamesBrierley 我明白那个解决方案,我也想这样做,但不幸的是我做不到

标签: javascript events


【解决方案1】:

根据this answer,你不能:

由用户代理生成的事件,无论是作为用户交互的结果,还是作为对 DOM 更改的直接结果,都受到用户代理的信任,其权限是脚本通过DocumentEvent.createEvent("Event") 方法,使用 Event.initEvent() 方法修改,或通过 EventTarget.dispatchEvent() 方法调度。可信事件的 isTrusted 属性值为 true,而非可信事件的 isTrusted 属性值为 false。

大多数不受信任的事件不应触发默认操作,除了 click 或 DOMActivate 事件。

推荐的方法是在mouseovermouseout 事件上添加和删除一个类,我在这个jsfiddle 中已经完成了。

【讨论】:

  • 谢谢,看来我应该坚持这个解决方案。有时最佳实践需要放在首位!
  • "在 mouseover 和 mouseout 事件上添加和删除一个类" ?或者从 elements...中添加和删除一个类...?
猜你喜欢
  • 2015-08-08
  • 1970-01-01
  • 2023-03-12
  • 2015-04-04
  • 2013-05-11
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
相关资源
最近更新 更多