他の2つの質問からの回答をまとめることができました。
1.イベントハンドラーをキューの前にバインドします
2.コントロール内のすべてのイベントにハンドラーをアタッチする
e.stopImmediatePropagation
アイデアは、すべてのイベントのキューの前にイベント ハンドラーをバインドすることです。これが改善できればうれしいです。
ソリューション...
$.fn.preBind = function (type, data, fn) {
this.each(function () {
var $this = $(this);
$this.bind(type, data, fn);
$.each(type.split(/ +/), function () {
var currentBindings = $this.data('events')[this];
if ($.isArray(currentBindings)) {
currentBindings.unshift(currentBindings.pop());
}
});
});
return this;
};
$.fn.suspendEvents = function () {
this.preBind("click keydown keyup keypress mouseover mouseenter mouseout mouseleave mousedown mouseup mousemove change blur focus focusin focusout scroll resize load unload beforeunload", null, blockEvents);
}
$.fn.resumeEvents = function () {
var _this = this;
$.each("click keydown keyup keypress mouseover mouseenter mouseout mouseleave mousedown mouseup mousemove change blur focus focusin focusout scroll resize load unload beforeunload".split(/ +/), function () {
_this.unbind(this, blockEvents);
});
}
function blockEvents(e) {
e.stopImmediatePropagation();
}
今私は使用できます
$("#controlId").suspendEvents();
$("#controlId").resumeEvents();
編集:resumeEvents()
IEの問題を克服するために変更されました。