【问题标题】:How to overwrite jquery event handlers如何覆盖 jquery 事件处理程序
【发布时间】:2010-10-19 00:05:11
【问题描述】:

我会尝试用一个简单的代码来解释这个问题。

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').click(fireclick);

所以现在它显然会提醒 2 次,但我只需要提醒一次。尝试了很多方法,但没有结果。

谢谢。

【问题讨论】:

  • 您能否就绑定事件的调用如何最终发生两次提供一些上下文?也许您可以防止第二次调用稍微改变您的代码功能。
  • 是,“瞧”。 :)
  • 如果它回答了您的问题,请标记答案,以便其他可能需要参考此问题的用户受益。

标签: jquery event-handling


【解决方案1】:

从 jQuery 1.7 开始,您应该使用 off 删除事件处理程序并使用 on 添加它们,尽管您仍然可以使用 click 简写。

$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);

原答案:

如果您想替换所有点击处理程序,请先调用unbind,不带函数参数。如果要替换所有事件处理程序,请不要指定事件类型。

$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);

【讨论】:

  • 呸!您因链接呼叫而获胜,但可能会改进您的答案,以便仅删除重新添加的特定处理程序?所以: $('#clickme').unbind('click', fireclick).click(fireclick)
  • 问题是“覆盖 jquery 事件处理程序”——我假设他想全部替换它们。为此,他需要每次都调用 unbind (这就是我对两者都重复调用的原因)并且不指定函数参数。
  • 当您回答问题时,这绝对是正确的做法,所以我投了赞成票。也就是说,我相信“新的和改进的”方法是使用 on() 和 off() 方法。由于此答案是搜索“jquery replace event handler”的第一个谷歌结果,因此添加到您的答案中可能会有所帮助。 $('#clickme').off('click').on('click', fireclick); 或简单的 $('#clickme').off('click').click(fireclick);
  • @IamChuckB 感谢您的更新,我已将其添加到我的答案中。
【解决方案2】:

我会尝试消除额外的调用,但如果没有 tyhat,您可以确保每次都调用这两个:

$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);

【讨论】:

    【解决方案3】:

    你可以使用jQuery函数unbind来移除第一个事件:

    var fireClick = function() { alert('Wuala!!!') };
    
    $('#clickme').click(fireclick);
    $('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
    $('#clickme').click(fireclick); // ...but now it will
    

    【讨论】:

      【解决方案4】:

      您应该使用 setInterval。问题是您不能同时弹出两个警报。第一个必须先关闭,否则第二个不能出现在屏幕上...

      【讨论】:

        【解决方案5】:

        使用命名空间确保您不会删除任何其他侦听器:

        $('#clickme').off('click.XXX').on('click.XXX', fireclick);
        

        只要没有其他代码使用XXX,您就可以确定您没有搞砸一些您不知道的其他行为。

        【讨论】:

          【解决方案6】:
          $(document).off('click', '#clickme').on('click', '#clickme', fireclick);
          

          【讨论】:

            猜你喜欢
            • 2010-10-09
            • 1970-01-01
            • 2011-10-05
            • 2015-03-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多