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

在Javascript中启用/禁用按钮单击处理程序,javascript,jquery,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

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

我想创建如下函数:

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]
}
这可能吗?我怎样才能做到这一点


提前感谢

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

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

function loadHandlers(buttonID) {
   $('#'+buttonID).on('click',bar[buttonID]);
}
你可以像这样储存它们

bar[buttonID] = function(event){

};
更新:

尽管这里和这里以及其他地方的答案都是
.date('events')
返回所有事件处理程序,但我无法让它工作

我用上述方法树立了一个榜样。检查以下链接


也许我错了,但我认为您无法从jquery对象(如

var handlers = $('#buttonId').unbind('click')
试试这个:

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;
}
就这样


JSFIDLE示例:

+1如果我可以禁用并启用它们而不存储它们,那太好了,我甚至不敢希望这是可能的。@LajosArpad,我添加了一个示例。这看起来是一个不错的解决方案。你可以用这种方式命名事件处理程序的名称并启用/禁用处理程序组。