我发现自己经常需要绑定一个事件处理程序,并立即在jQuery中执行该处理程序。到目前为止,我一直在使用这种懒惰的仿制模式来保持代码DRY:
$(...).bind('event', function() {
...
}).trigger('event');
今天我被这个咬了,因为其他处理程序已经绑定到event
,并且当我以这种方式触发事件时它们也被执行,但是由于引起了很多问题,他们当时不应该被执行。
要解决此问题,我已将模式更改为:
var handler = function() {
...
};
var element = $(...);
element.bind('event', handler);
handler.call(element);
这是按照我的预期方式工作的,但它很丑陋,而且非常冗长,所以我正在考虑将这个模式封装到一个jQuery插件中:
$(...).bindAndExecute('event', function() { ... });
我在jQuery.bind()
选项或任何其他方法中找不到相同的内容,但我可能错过了一些东西。有没有更简洁的方法来做这个我没有想到的?我不想重新发明轮子。
答案 0 :(得分:3)
jQuery支持namespacing your events。这是一种非常有用的技术,当您想要解除绑定或触发特定事件组时非常方便。
$(...).bind('event.myNamespace', function() {
...
}).trigger('event.myNamespace');
当您开发更大的应用程序或jQuery插件时,使用这种技术几乎是不可避免的(或者至少是明智的人不会避免它)。