Events 从JQuery中的元素获取单击处理程序

Events 从JQuery中的元素获取单击处理程序,events,event-handling,jquery,Events,Event Handling,Jquery,如何在JQuery中获取对元素的单击处理程序的引用 以下是我试图做的: 存储单击处理程序, 更改下一次单击的单击处理程序, 还原原始的单击处理程序 var originalClick = $(settings.currentTarget).click; $(settings.currentTarget).off("click"); $(settings.currentTarget).click(function (e) { e.preventDefault(); setting

如何在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中维护可见性布尔值解决了此问题,如果为真,请不要重新打开模式。

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

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

jQuery._data( elem, "events" );

如果你这样做会怎么样

  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);
    });

$(settings.currentTarget)。单击
是绑定事件处理程序的函数。它不是事件处理程序本身。原始事件处理程序是如何绑定的?使用jQuery或任何其他方式?@FelixKling原始的单击处理程序是使用knockout绑定的。这可能会有所帮助:所以您使用了
单击
绑定?我不知道它在内部是如何工作的,但我假设knockout使用的是
addEventListener
。无法以这种方式获取对处理程序的引用。我认为您获得该消息是因为您正在调用
$(settings.currentTarget).off(“单击”)在单击过程中再次调用,但从未调用。在第一个上。看起来已经是了。就像你在顶端一样。不幸的是,这给了我同样的东西。我想我需要做的是让这个新的click处理程序在原始的click处理程序和stopPropagation之前执行,只是不知道如何执行。我认为您没有正确使用.Off()。你为什么要解开你还没绑好的东西?从jQuery文档
中,off()方法删除了附加了.on()的事件处理程序。
第一次调用它时,从来没有先附加过.on()。你可能把事情搞混了。你能提供更多关于你想做什么的信息吗?什么是
设置。currentTarget
?我还注意到你说你在使用knockout.js。无法使用jQuery完成此部分的任何原因?使用
var originalClick=$(settings.currentTarget)。单击没有意义
jQuery.fn.click
是jQuery方法,而不是事件处理程序。“你不能将它绑定为事件处理程序。”我知道,这是我告诉他的。我想他最初是用击倒之类的东西绑起来的。