我在 jsfiddler 上制作了一个示例,它可以满足您的需求..您可以将其扩展到其他类型的事件.. 不像詹姆斯邦德那样优雅,但可以解决问题
本质上,我正在检查所有分配有事件的元素,并检查它们是否有点击事件(仅检查一个,因此[...].click[0]
)并使用该unbind
函数
// some elements that I'll bind a click event handler through jquery
<input type="button" id="btn1" value="click 1" />
<input type="button" id="btn2" value="click 2" />
<input type="button" id="btn3" value="click 3" />
// bind all buttons to some fake click handler
var btn_Click = function(e) {
alert("clicked button " + $(this).attr("id"));
};
$("input[type='button']").on("click", btn_Click);
// defining which events to block
var events_to_block = ['click'];
// filtering and unbinding the handler for click
var x = document.getElementsByTagName("*");
$(x).each(function() {
var x_events = $.data(this, 'events' );
if(x_events !== undefined) {
if(-1 != events_to_block.indexOf("click")) {
if((x_events.click !== undefined) && (x_events.click !== null)) {
if($(this).attr("id") !== "btn2") {
$(this).unbind("click", x_events.click[0].handler);
}
}
}
}
});
PS:我故意“允许”第二个按钮(btn2
)来保持事件只是为了演示