多个jQuery .clicks,只使用最新的

时间:2014-05-09 09:15:28

标签: jquery

假设我有2个Javascript文件,includeFirst.jsincludeSecond.js,这些文件正在加载到页面中。如果第一个包含一些代码,如:

$('#myButton').click(function() {
   alert('Hello World');
}

第二个包含:

$('#myButton').click(function() {
    alert('World Hello');
}

我正在弹出两个警报。有没有什么方法可以在第二个中添加一些东西给第一个.click,以便第一个不运行?

我意识到这种编码方法似乎很邋/ bad,但它只是修复了一些将很快完全重写的遗留代码。我想暂时解决这个问题。

4 个答案:

答案 0 :(得分:3)

在第二个JS文件中,使用off()删除任何现有处理程序,然后再附加新的click事件:

$('#myButton').off('click').click(function() {
    alert('World Hello');
}

答案 1 :(得分:0)

取消绑定现有的事件处理程序

您应取消绑定任何现有的事件处理程序,然后绑定一个新的事件处理程序。但请注意,当现有事件处理程序执行重要操作时,这可能会产生不良影响,而新事件不会复制此行为。

$("#myButton")
    .unbind("click")
    .click(function(){
        alert("Hello world");
    });

我已经链接了这些调用,因此它将首先取消绑定任何现有的点击事件处理程序(当有多个所有时),然后绑定一个新的一个...

取消绑定相同类型的特定事件处理程序

如果您只想解除绑定相同类型的特定事件处理程序,可以使用event namespaces。它们的格式为click.namespaceName

  

jQuery .bind()文档:
  如果 eventType 字符串包含句点(。)字符,则表示   event是命名空间。句点字符将事件与其分开   命名空间。例如,在通话.bind( "click.name", handler)中,   字符串单击是事件类型,字符串 name 是   命名空间。命名空间允许我们取消绑定或触发某些事件   在不影响他人的情况下打字。

答案 2 :(得分:0)

您可以使用Unbind功能删除绑定到元素的所有点击事件。

      var myButton = $("#myButton");
      myButton.unbind('click');
      myButton.click(function() {
          alert('World Hello');
      }

注意:此代码尚未经过测试。

答案 3 :(得分:-2)

尝试在第二次点击事件中使用event.preventDefault()