jQuery插件事件顺序

时间:2011-09-07 15:15:24

标签: jquery internet-explorer jquery-plugins

我正在使用cleditor一个jQuery插件,它是一个WYSIWYG编辑器。不幸的是,我遇到了涉及事件处理程序的IE中的错误。当用户在聚焦文本框之前单击按钮时,会收到错误消息。如果他们专注于文本框,那就没关系,而且在其他浏览器上它根本不是问题。我不想编辑插件,因为我希望以后能够更新它,而且我不是100%它是插件的错(编写插件的人往往很聪明)。在IE中,插件的事件处理程序在我的自定义处理程序之前运行,至少在调试时。所以......

问:如何在不编辑插件的情况下确保我的自定义事件处理程序在插件的事件处理程序之前运行?

1 个答案:

答案 0 :(得分:1)

jQquery绑定事件首先在触发元素上触发,然后逐个冒泡到它的父节点,并且在每个元素上它将按照它们绑定在该元素上的顺序触发事件。

编辑:

要更改这些事件的顺序,只需修改存储在该元素上的事件对象即可。下面是一个带小提琴的演示。最后一个事件将首先被触发,即使它最后被绑定。

http://jsfiddle.net/FqafW/

$("#demo").bind('click',function(){
   console.log('event 1'); 
}).bind('click',function(){
   console.log('event 2'); 
}).bind('click',function(){
   console.log('event 3'); 
}).bind('click',function(){
    console.log('my event');
});

var clickEvents = $("#demo").data("events").click;
console.log(clickEvents);
var myClickEvent = clickEvents.pop();
console.log(myClickEvent);
console.log(clickEvents);
clickEvents.unshift(myClickEvent);
console.log(clickEvents);