jQuery中的绑定事件总是在最后执行
有没有办法将事件绑定到某个对象,并确保其中一个事件将始终执行?
$('#something').bind('click', function () { // do something first }); $('#something').bind('click', function () { // do this always last }); $('#something').bind('click', function () { // do this after first one });
谢谢!
您可以一次性绑定所有处理程序:
$('#something').click(function () { first(); second(); third(); });
这带来了额外的好处,比绑定3个独立的听众更有效/轻量级。
编辑:这可能很有用,但可能无法解决OP的问题。 触发one
处理程序的处理程序不会附加到当前处理程序队列的末尾,它只在后续事件上运行。
对于未来的读者,您可以通过使用one()
代理处理程序来实现此目的。
$('.some-class').on('anevent', function(evt) { $(this).one(evt.type, function(evt) { //this code will fire after all other handlers for this event, except others that are proxied the same way console.log(evtO == evt, 'same event'); if (evt.isDefaultPrevented())//can check signals to see whether you should still handle this event return; //do stuff last }); })
后来在其他地方:
$('.some-class').on('anevent', function(evt) { //do stuff first evt.preventDefault();//can signal to prevent the proxied function. could use evt.stopPropagation() instead })
一个警告是,如果后来的处理程序使用return false;
或者stopImmediatePropagation()
,与one()
绑定的函数将在下次发生该事件时首先触发,除非您以某种方式明确解除绑定。