如何在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中维护可见性布尔值来解决了这个问题,如果是,则不要重新打开模态。
答案 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);
});