在Javascript中启用/禁用按钮单击处理程序

时间:2012-06-21 15:32:45

标签: javascript jquery

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

我想创建这样的函数:

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

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

提前谢谢

3 个答案:

答案 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')返回所有事件处理程序,但我无法让它工作。

我已经按照上述方式建立了一个例子。谢谢以下链接

Working Fiddle

答案 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')