jQuery自定义命名空间事件被触发两次

时间:2015-05-27 16:23:58

标签: javascript jquery events namespaces

我遇到了带有命名空间的自定义事件的问题。

如果我绑定一个事件回调,指定我的自定义事件命名空间,则回调将进行两次。一旦我按预期使用命名空间触发它,而且当事件被触发时没有命名空间。

在我看来,当绑定到具有指定命名空间的事件时,不应该为非命名空间事件触发回调。

问题:我是否遇到过jQuery事件绑定的错误,或者我应该使用所述的解决方法来处理我的事件?我正在寻找这种情况下的最佳实践。

要重现的代码:

$(document).on('myevent.mynamespace', function (e) {console.log(e);});
$(document).trigger('myevent.mynamespace');
$(document).trigger('myevent');

输出:(控制台)

_.Event {type: "myevent", timeStamp: 1432746225028, jQuery21109806629773229361: true, isTrigger: 3, namespace: "mynamespace"…}
_.Event {type: "myevent", timeStamp: 1432746225033, jQuery21109806629773229361: true, isTrigger: 3, namespace: ""…}

预期:

_.Event {type: "myevent", timeStamp: 1432746225028, jQuery21109806629773229361: true, isTrigger: 3, namespace: "mynamespace"…}

解决方法:

$(document).on('myevent.mynamespace', function (e) {
  // break out if the namespace does not match as expected
  if (e.namespace !== 'mynamespace') return;
  console.log(e);
});
$(document).trigger('myevent.mynamespace');
$(document).trigger('myevent');

0 个答案:

没有答案