我发现自己经常需要在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()
选项或其他方法中找不到相应的等价物,但也许我可能错过了什么。是否有更简洁的方法来完成这个任务,而我又没有考虑到?我不想重新发明轮子。