3

好的,假设我有一个按钮,我想启用/禁用它的点击处理程序。

我想创建这样的功能:

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]
}

这可能吗?我怎样才能做到这一点?

先感谢您

4

3 回答 3

2

据我所知,您不能仅从元素的 ID 存储/检索事件处理程序,您必须在创建处理程序时手动存储这些事件处理程序。但是你可以on/off像下面这样处理

function preventHandlers(buttonID) {
    $('#'+buttonID).off('click',bar[buttonID]);
}

function loadHandlers(buttonID) {
   $('#'+buttonID).on('click',bar[buttonID]);
}

你可以像这样存储它们

bar[buttonID] = function(event){

};

更新:

尽管此处的答案如何使用 Firebug(或类似工具)调试 JavaScript/jQuery 事件绑定和此处如何在调试时或从 JavaScript 代码中查找 DOM 节点上的事件侦听器?和其他人说.date('events')返回所有事件处理程序,我无法让它工作。

我已经用上述方式建立了一个例子。检查以下链接

工作小提琴

于 2012-06-21T15:39:21.197 回答
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/

于 2012-06-21T15:50:18.957 回答
0

也许我错了,但我认为您不能从 jquery 对象中检索所有事件回调,例如

var handlers = $('#buttonId').unbind('click')
于 2012-06-21T15:44:59.210 回答