Javascript jquery一次性从多个输入字段取消绑定事件
我有一个需求,需要跟踪特定div中输入字段的更改,并在发生更改时触发事件 我使用下面的代码来实现这一点Javascript jquery一次性从多个输入字段取消绑定事件,javascript,jquery,forms,unbind,Javascript,Jquery,Forms,Unbind,我有一个需求,需要跟踪特定div中输入字段的更改,并在发生更改时触发事件 我使用下面的代码来实现这一点 $('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){ var $elem = $(this); $elem.data("oldval",$elem.val());
$('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){
var $elem = $(this);
$elem.data("oldval",$elem.val());
$elem.on("change",{ctx:this},setItemStatus);
});
这很好,但要求的第二部分是事件只能触发一次。也就是说
function setItemStatus(event){
var $el = $(this);
if($el.val() != $el.data("oldval")){
console.log("Invoke Update Method");
//unbind the events so that it doesn't trigger the update twice.
$('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){
var $elm = $(this);
$elm.off("change");
});
}
}
但即使在这个更改事件没有解除绑定之后,如果我在表单的任何其他字段中进行更改,它仍然会触发
我知道我可以设置停止执行代码的条件,但我想取消绑定。您可以使用Jquery的方法,而不是使用上的
$('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){
var $elem = $(this);
$elem.data("oldval",$elem.val());
$elem.one("change",{ctx:this},setItemStatus);
});
然后,您不再需要“关闭”事件,因为这是one
方法所做的?而不是.off()。是的,它不起作用。问题是函数中的选择器没有选择任何输入标记。它从不触发关闭代码。我使用的是同一个选择器,它在绑定中工作得很好。但有一个选择器意味着它将为每个字段触发一次。我需要基本上限制每个表单一次。哦,你是对的,误解了这个问题。尝试将附加的函数也传递给off方法$elm.off(“change”,setItemStatus)代码>传递该方法将导致该方法再次执行。不是吗。问题似乎是在功能选择器中选择输入不起作用。它从不选择任何输入字段。知道为什么会这样吗???也许是你的jQuery版本?我做了一个模拟你的问题,它的工作。尝试在您的站点上进行测试。