【问题标题】:Why does the trigger event not call events defined with addEventListener为什么触发事件不调用addEventListener定义的事件
【发布时间】:2015-01-12 23:02:21
【问题描述】:

我创建了一个示例案例:

http://jsfiddle.net/y42pu5b6/

$(function(){
    function ping (){ 
        alert( "function fired" ); 
        console.log("fired"); 
    }
    console.log($("input#one")[0]);
    $("input#one")[0].addEventListener("change", ping);
    $("input#one").trigger("change");

    $("input#two").on("change", ping);
    $("input#two").trigger("change");

});

似乎使用 jQuery,您无法通过 addEventListener 调用“触发”和应用事件。是否有一个原因?我的想法是,由于 trigger 是一个 jquery 方法,它只扫描 jQuery 对象以查找处理程序,而不是实际应用于对象的内容。

我觉得触发器应该针对所有适用的事件触发,无论它们是通过on 还是addEventListener 添加的。也许它正在时间帧 X 拍摄代码快照,并将其存储在 jquery 对象中。我不确定。

也许其他人比我更有洞察力?

【问题讨论】:

  • @Shomz,您只是在调用window.alert(),但不返回任何回调函数。
  • @haim770 对,完全错过了,谢谢!

标签: javascript jquery


【解决方案1】:

由于不同的浏览器以不同的方式处理不同的事件,jQuery 通过引入自己的Event 抽象层来缓解这个问题(这也提供了event namespacing 以及其他好处)。

因此,当您调用 trigger 时,jQuery 只会触发其自身绑定的事件(使用 onbindclick 等),但它不会尝试触发本地绑定事件事件。

http://learn.jquery.com/events/triggering-event-handlers/

【讨论】:

  • 这是有道理的。我想我只是希望虽然有一个跨平台使用的抽象层,但它也可以用来调用现有代码。有了这种理解,旧系统中的某些代码似乎需要更改设计并更新实现。我想知道是否有一个插件可以处理跨平台的“触发”。
猜你喜欢
  • 1970-01-01
  • 2014-05-27
  • 2021-07-16
  • 2011-12-03
  • 2014-12-06
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多