jQuery - 绑定并执行单个事件处理程序?

6

我发现自己经常需要在jQuery中绑定事件处理程序,并立即执行该处理程序。到目前为止,我一直在使用这种懒惰的伪模式来保持代码DRY:

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

今天,由于其他处理程序已经绑定到事件并在以这种方式触发事件时也被执行,导致我被此问题所困扰。这引起了许多问题,因为它们在那个时候不应该被执行。
为了解决这个问题,我已将模式更改为如下:
var handler = function() {
    ...
};

var element = $(...);

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

这个代码的功能符合我的预期,但是写得很丑并且很冗长,因此我考虑将这个模式封装成一个jQuery插件:

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

我在jQuery.bind()选项或其他方法中找不到相应的等价物,但也许我可能错过了什么。是否有更简洁的方法来完成这个任务,而我又没有考虑到?我不想重新发明轮子。

1个回答

3

jQuery支持给事件命名空间(Namespaced_Events)。这是一种非常有用的技术,在您想要解绑或触发特定组的事件时非常方便。

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

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

快速jsFiddle演示


我不理解这个建议。你能解释一下吗? - FtDRbwLXw6
我没有使用自定义事件,所以我不确定这如何适用于我的情况。谢谢您能提供的任何帮助。 - FtDRbwLXw6
@drrcknlsn,你也可以为“标准”事件定义命名空间。 - Frédéric Hamidi
哦!谢谢你提供的链接,这正是我正在寻找的。真不敢相信我之前竟然不知道它的存在。点赞! - FtDRbwLXw6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接