有办法吗?
$("#controlId").suspendEvents();
$("#controlId").resumeEvents();
我知道preventDefault
和stopPropagation
。我想在活动之外做。
请在答案中考虑以下内容。
.off()
然后逐个添加它们。答案 0 :(得分:0)
一切都在冒泡,所以要抓住身体中的任何事件并阻止它们。
替代
var myCtlrs = $("all i want").attr("disabled", disabled");
然后
myCtlrs.removeAttr("disabled");
答案 1 :(得分:0)
我能够将其他两个问题的答案放在一起。
1。Bind an event handler to front of the queue
2。Attach handler to all events in a control
我们的想法是将一个带有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问题。