如何打破event.stopImmediatePropagation

时间:2014-06-10 07:11:48

标签: javascript jquery jquery-ui javascript-events

我有这样的代码。

<td>
 <span class='ui-button-next'>NEXT</span>
</td>

此应用程序包含一个库,不允许编辑。在点击“ui-button-next”时,他们正在调用event.stopImmediatePropagation()来阻止某些事情。

当用户点击此“span”而不触及该库时,我想调用一个函数。

我的自定义代码,如

$(".ui-button-next").click(function(){
});

$(".ui-button-next").bind("click",function(){
});

$(".ui-button-next").on("click",function(){
});
由于库中的event.stopImmediatePropagation()

无效。 任何解决方法?

非常感谢你!

1 个答案:

答案 0 :(得分:3)

您可以访问基础事件列表(数组)并在第一个处插入新的单击处理程序,它将被正常触发,但请注意,在您的情况下执行顺序应该不是问题:

//this is the inner handler
$('.ui-button-next').click(function(e){
   e.stopImmediatePropagation();     
});
//this is the handler of your own
$('.ui-button-next').click(function(e){       
    alert('OK');
});

//get click handlers list
var clicks = $._data($('.ui-button-next')[0], 'events')['click'];
//get the last added handler (which is your own handler) and put it at the beginning
clicks.unshift(clicks.pop());

Demo.

UPDATE :为了保持执行顺序(首先执行默认处理程序,之后执行所有其他添加的处理程序),我认为你必须通过删除所有{修改默认处理程序{1}}方法,我们必须在这里使用e.stopImmediatePropagation()方法。请注意,在这种情况下使用该方法是完全可以的。

eval()

Updated demo.