好吧,假设我有一个按钮,我想启用/禁用其点击处理程序。
我想创建这样的函数:
var bar = [];
function storeHandlers(buttonID) {
//I would like to store the click handlers in bar[buttonID]
}
function preventHandlers(buttonID) {
storeHandlers(buttonID);
//I would like to disable all the click handlers for button
}
function loadHandlers(buttonID) {
//I would like to enable all the handlers loaded from bar[buttonID]
}
这可能吗?我怎样才能做到这一点?
提前谢谢
答案 0 :(得分:2)
据我所知,您无法仅从元素的ID存储/检索事件处理程序,您可以在创建处理程序时手动存储这些事件处理程序。但是你可以on/off
像下面这样的处理程序
function preventHandlers(buttonID) {
$('#'+buttonID).off('click',bar[buttonID]);
}
function loadHandlers(buttonID) {
$('#'+buttonID).on('click',bar[buttonID]);
}
你可以像
那样存储它们bar[buttonID] = function(event){
};
<强>更新强>
虽然How to debug JavaScript/jQuery event bindings with Firebug (or similar tool)和How to find event listeners on a DOM node when debugging or from the JavaScript code?以及其他人的回答是.date('events')
返回所有事件处理程序,但我无法让它工作。
我已经按照上述方式建立了一个例子。谢谢以下链接
答案 1 :(得分:1)
试试这个:
function preventClick(buttonID) {
$('#'+buttonID).data('events').saved_click = $('#'+buttonID).data('events').click;
$('#'+buttonID).data('events').click = null;
}
function allowClick(buttonID) {
$('#'+buttonID).data('events').click = $('#'+buttonID).data('events').saved_click;
}
就是这样!
jsFiddle示例:http://jsfiddle.net/cec6z/9/
答案 2 :(得分:0)
也许我错了,但我认为你不能从jquery对象中检索所有事件回调,例如
var handlers = $('#buttonId').unbind('click')