6

我发现自己经常需要绑定一个事件处理程序,以及立即在 jQuery 中执行该处理程序。迄今为止,我一直在使用这种懒惰的人造模式来保持代码干燥:

$(...).bind('event', function() {
    ...
}).trigger('event');

今天被这个咬到了,因为其他handler已经绑定了event,而且我这样触发事件的时候也执行了,但是造成了很多问题,因为他们不应该被当时执行。

为了解决这个问题,我将模式更改为:

var handler = function() {
    ...
};

var element = $(...);

element.bind('event', handler);
handler.call(element);

这按我预期的方式工作,但它像罪恶一样丑陋而且非常冗长,所以我正在考虑将这种模式封装到一个 jQuery 插件中:

$(...).bindAndExecute('event', function() { ... });

我在选项或任何其他方法中找不到与此等效jQuery.bind()的方法,但我可能错过了一些东西。有没有我没想到的更简洁的方法?我不想重新发明轮子。

4

1 回答 1

3

jQuery 支持命名你的事件。这是一种非常有用的技术,当您想要解除绑定或触发一组特定事件时非常方便。

$(...).bind('event.myNamespace', function() {
    ...
}).trigger('event.myNamespace');

当您开发更大的应用程序或 jQuery 插件时,使用这种技术几乎是不可避免的(或者至少明智的人不会避免使用它)。

快速 jsFiddle 演示

于 2012-07-10T19:56:14.213 回答