假设我有一个web应用程序,它的页面可能包含4个脚本块——我编写的脚本可能在其中一个块中找到,但我不知道哪个块由控制器处理.
我将大约onclick
个事件绑定到一个按钮,但我发现它们有时会以我意想不到的顺序执行.
有没有办法确保秩序,或者你们过go 是如何处理这个问题的?
假设我有一个web应用程序,它的页面可能包含4个脚本块——我编写的脚本可能在其中一个块中找到,但我不知道哪个块由控制器处理.
我将大约onclick
个事件绑定到一个按钮,但我发现它们有时会以我意想不到的顺序执行.
有没有办法确保秩序,或者你们过go 是如何处理这个问题的?
我多年来一直试图推广这种过程,但在我的例子中,我只关心链中第一个事件侦听器的顺序.
如果它有任何用处,下面是我的jQuery插件,它绑定了一个总是在任何其他事件之前触发的事件侦听器:
** UPDATED inline with jQuery changes (thanks Toskan) **
(function($) {
$.fn.bindFirst = function(/*String*/ eventType, /*[Object])*/ eventData, /*Function*/ handler) {
var indexOfDot = eventType.indexOf(".");
var eventNameSpace = indexOfDot > 0 ? eventType.substring(indexOfDot) : "";
eventType = indexOfDot > 0 ? eventType.substring(0, indexOfDot) : eventType;
handler = handler == undefined ? eventData : handler;
eventData = typeof eventData == "function" ? {} : eventData;
return this.each(function() {
var $this = $(this);
var currentAttrListener = this["on" + eventType];
if (currentAttrListener) {
$this.bind(eventType, function(e) {
return currentAttrListener(e.originalEvent);
});
this["on" + eventType] = null;
}
$this.bind(eventType + eventNameSpace, eventData, handler);
var allEvents = $this.data("events") || $._data($this[0], "events");
var typeEvents = allEvents[eventType];
var newEvent = typeEvents.pop();
typeEvents.unshift(newEvent);
});
};
})(jQuery);
Things to note: