jQuery - 绑定(bind)并执行单个处理程序?

标签 jquery

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

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

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

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

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

var element = $(...);

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

这按照我期望的方式工作,但它丑陋得像罪过,而且相当冗长,所以我正在考虑将此模式封装到 jQuery 插件中:

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

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

最佳答案

jQuery 支持namespacing your events 。这是一项非常有用的技术,当您想要取消绑定(bind)或触发一组特定的事件时,它会非常方便。

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

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

Quick jsFiddle Demo

关于jQuery - 绑定(bind)并执行单个处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420871/

相关文章:

jquery循环插件pager被覆盖

javascript - 预加载图像以使其在加载过程中不调整大小?

jquery - 仅标记AvalaibleTags 选项不起作用

javascript - 如何在没有ID的情况下标记循环生成的复选框?

javascript - jquery select 删除未定义?

javascript - 通过 HREF 查询 <area> 标签

jquery - 与 JQuery 模板的 knockout 绑定(bind)不显示数据?

php - 选择多个不起作用

javascript - 通过JQuery触发页面加载时的click JS代码

jQuery .attr() 多个属性