在jquery中双击'click'事件

时间:2012-04-08 12:41:22

标签: jquery

我在输入对象中调用'click'函数时遇到了一些问题。 function为输入分配一个事件:

function v_start() {
      $('#next').click(function(){
                    v_check();
      });
}

现在在javascript文件中name.js和name2.js我有: 复制代码

$(function(){
      v_start();
});

只是一个示例,但在这种情况下,函数v_check将在一次单击输入中被调用两次。只有一次成为活动的条件或方式?为什么第二个事件不会覆盖?

4 个答案:

答案 0 :(得分:3)

取消绑定并绑定以确保仅添加一次事件处理程序:

$("#mySelector").unbind("click").bind("click",myFunction) 

如果有多个事件监听器:

var myFunction = function(e){ /// my code }

$("#mySelector").unbind("click",myFunction).bind("click",myFunction) 

答案 1 :(得分:1)

每次在jQuery中处理事件时,它都会将处理程序添加到列表中。没有“覆盖”。

在这种情况下,为避免事件被分配两次,一个简单的解决方案是附加一个数据标志,指示事件已被附加,例如这样。

function v_start() {
    if (!$('#next').data('click-handled')) {
        $('#next').data('click-handled', true).click(function(){
            v_check();
        });
    }
}

(您也可以手动获取事件列表并检查您的功能是否存在,但这更复杂。)

答案 2 :(得分:1)

由于您在每个文件中调用v_start两次,显然您将事件绑定两次。您可以执行简单检查click事件是否已按此处理:

function v_start() {
    var $next = $('#next');
    $next.data('events').click || $next.click(v_check);
}

答案 3 :(得分:1)

使用:

$( ".mybutton" ).off('click').on('click', function() { 
// same code
}); 

对我来说这是最好的解决方案,或者

$(".mybutton").unbind("click",myFunction).bind("click",myFunction)