从JQuery中的element获取click处理程序

时间:2013-06-19 20:22:48

标签: events event-handling jquery

如何在JQuery中获得对元素的单击处理程序的引用?

以下是我要做的事情:

存储点击处理程序, 更改下一次单击的单击处理程序, 恢复原始点击处理程序

var originalClick = $(settings.currentTarget).click;
$(settings.currentTarget).off("click");

$(settings.currentTarget).click(function (e) {
    e.preventDefault();
    settings.model.modal.close();

    $(settings.currentTarget).off("click");
    $(settings.currentTarget).click(originalClick);
});

上面的代码第一次运行,但是,当我再次单击该元素时,它失败了:

 Uncaught TypeError: Object [object HTMLAnchorElement] has no method 'on' 

更新
我现在意识到这是一个非常糟糕的设计,我正在尝试做。我已经通过在viewmodel中维护可见性布尔值来解决了这个问题,如果是,则不要重新打开模态。

2 个答案:

答案 0 :(得分:6)

$(...).click是jQuery click()方法,而不是您的事件处理程序。

您可以使用undocumented internal API获取事件处理程序列表:

jQuery._data( elem, "events" );

答案 1 :(得分:0)

如果你这样试试怎么办?

  var originalClick = $(settings.currentTarget).click;
    $(settings.currentTarget).off("click");

    $(settings.currentTarget).on("click",function (e) {
        e.preventDefault();
        settings.model.modal.close();

        $(settings.currentTarget).off("click");
        $(settings.currentTarget).click(originalClick);
    });