Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双重呼叫';单击';jquery中的事件_Jquery - Fatal编程技术网

双重呼叫';单击';jquery中的事件

双重呼叫';单击';jquery中的事件,jquery,Jquery,我在调用输入对象中的“click”函数时遇到了一点问题。函数将事件分配给输入: function v_start() { $('#next').click(function(){ v_check(); }); } 现在,在javascript文件name.js和name2.js中,我有: 复制代码 $(function(){ v_start(); }); 这只是一个示例,但在这种情况下,函数v_check将在一次单击

我在调用输入对象中的“click”函数时遇到了一点问题。函数将事件分配给输入:

function v_start() {
      $('#next').click(function(){
                    v_check();
      });
}
现在,在javascript文件name.js和name2.js中,我有: 复制代码

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

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

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

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

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

(您也可以手动获取事件列表并检查函数是否存在,但这要复杂得多。)

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

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

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

(您也可以手动获取事件列表并检查函数是否存在,但这要复杂得多。)

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

$("#mySelector").unbind("click").bind("click",myFunction) 
如果存在多个事件侦听器:

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

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

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

$("#mySelector").unbind("click").bind("click",myFunction) 
如果存在多个事件侦听器:

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

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

由于在每个文件中调用了两次
v_start
,显然您绑定了两次事件。如果
click
事件已按如下方式处理,则可以进行简单检查:

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

由于在每个文件中调用了两次
v_start
,显然您绑定了两次事件。如果
click
事件已按如下方式处理,则可以进行简单检查:

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

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

$(".mybutton").unbind("click",myFunction).bind("click",myFunction)
使用:

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

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

您可能会附加事件处理程序两次。添加
警报(123)
然后查看代码段是否同时位于
name.js
name2.js
中,它将附加两次事件处理程序,从而触发两次行为。您可能会附加两次事件处理程序。添加
警报(123)
在那里,查看代码段是否同时位于
name.js
name2.js
中,它将附加两次事件处理程序,从而触发两次行为。或者,如果使用jQuery 1.7+,请使用
.off()
.on()
而不是
。取消绑定()
.bind()
。或者,如果使用jQuery 1.7+,使用
.off()
.on()
而不是
.unbind()
.bind()