我发现自己经常需要绑定一个事件处理程序,以及立即在 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()
的方法,但我可能错过了一些东西。有没有我没想到的更简洁的方法?我不想重新发明轮子。