Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Javascript 如何使用jQuery on(“change”)防止多事件调用_Javascript_Jquery_Events_Onchange - Fatal编程技术网

Javascript 如何使用jQuery on(“change”)防止多事件调用

Javascript 如何使用jQuery on(“change”)防止多事件调用,javascript,jquery,events,onchange,Javascript,Jquery,Events,Onchange,我使用这段代码有重复的事件,这段代码故意要运行多次: $('selector')。打开('change',myFunction); 然后我在谷歌上搜索了一下,发现我可以/应该这样做 $('selector')。关闭('change',myFunction)。打开('change',myFunction); 首先解除绑定,这是有道理的,但我仍然有相同的问题,最终导致多个绑定 奇怪的是,我改变了代码,在off()部分的函数名后面加了一个() $('selector').off('change',

我使用这段代码有重复的事件,这段代码故意要运行多次:

$('selector')。打开('change',myFunction);
然后我在谷歌上搜索了一下,发现我可以/应该这样做

$('selector')。关闭('change',myFunction)。打开('change',myFunction);
首先解除绑定,这是有道理的,但我仍然有相同的问题,最终导致多个绑定

奇怪的是,我改变了代码,在
off()
部分的函数名后面加了一个

$('selector').off('change',myFunction()).on('change',myFunction());
因此,我的问题是:在
off()
部分使用
myFunction()
而不是
myFunction
是否正确

没有
off
重载接受您调用它的参数集。您的“工作”代码与

$('selector').off('change').on('change', myFunction);

如果在
.off('change',myFunction())
中执行
myFunction
会产生不必要的副作用,只需在页面加载时委托事件一次,而不要添加多个侦听器

$(document).on('change','selector', myFunction);

我使用了
文档
,但您可以在页面中将其移动到一个更接近的永久资产,该资产是元素的祖先

经过研究,我使用

$('selector').off('.myNamespace').on('change.myNamespace', myFunction);
这样做,我不会解除任何其他事件的绑定,我只会解除我真正需要的事件的绑定

注:我仍然不知道为什么
$('selector')。off('change',myFunction)
不起作用,但我会继续


谢谢。

我的意思是,正如人们所认为的那样,代码现在运行良好。但是为什么我需要在
off
上包含()而在
on
上不包含()?这可以更改为
$('selector')。off('change.myFn')。on('change.myFn',myFunction))这样其他更改处理程序不会被取消。@Sagar correct。更多关于使用“事件名称空间”限定事件的信息“-@Igor,谢谢!我明白了。奇怪的是,即使使用“事件名称空间”关闭
,我仍然会得到多个绑定。。。我会检查我是否在其他地方做了其他事情。@RafaelTrevisan-展示你是如何做的-你可以在问题中添加新版本的代码,保留原始代码,当然这并不是那么简单。我在动态呈现的元素上动态附加这些绑定;-)但这正是活动代表团的目的。。。是的,就是这么简单。看,就是这么简单。您不应该尝试“修复”重复绑定。“你不应该一开始就重复绑定。我同意,”塔普拉说。但有时一个黑客在这里和那里可能会节省一些开发时间。@charlietfl,我再看一看。tks