我在输入对象中调用'click'函数时遇到了一些问题。 function为输入分配一个事件:
function v_start() {
$('#next').click(function(){
v_check();
});
}
现在在javascript文件中name.js和name2.js我有: 复制代码
$(function(){
v_start();
});
只是一个示例,但在这种情况下,函数v_check将在一次单击输入中被调用两次。只有一次成为活动的条件或方式?为什么第二个事件不会覆盖?
答案 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)