.on('click')和.off('click').on('click')之间的区别是什么?

19

结合 .off.click 有什么作用或区别?

$('#link').off('click').on('click',function(){});

对比。

$('#link').on('click',function(){});

什么是组合它们的优点?
3个回答

28

这将添加一个新的click事件处理程序:

$('#link').on('click', function(){});

这将移除所有使用 .on() 添加的现有 click 事件处理程序(如果有的话),然后添加一个新的 click 事件处理程序:

$('#link').off('click').on('click', function(){});

你的回答很简单易懂。但是这个 .off 行为可以通过使用 event.preventdefault() 来实现,对吗? - Jithin Raj P R
不是很清楚。你想把 event.preventdefault() 放在哪里? - Racil Hilan
如果在我的当前“click”中有任何其他“click”事件处理程序 - 我可以通过“event.preventdefault()”来防止它发生,对吗?有什么不同吗? - Jithin Raj P R
2
不,它并不会。它只是防止元素的默认操作(例如,submit按钮提交表单或链接元素加载URL)。它不会阻止任何先前附加的click事件。 - Racil Hilan
如果代码经常被调用,包括“off”会非常有帮助。否则,您可能会附加多个.on('click')处理程序。 - farrellw
或者你可以使用.one('click') - Meet Gondaliya

3
根据 jQuery 文档,.off() 方法用于移除使用 .on() 添加的事件处理函数。有关委托和直接绑定事件的讨论,请参阅该页面。如果不带参数调用 .off(),则将删除添加到元素的所有处理程序。可以通过提供事件名称、命名空间、选择器或处理程序函数名称的组合来从元素上删除特定的事件处理程序。当给出多个筛选参数时,必须匹配所有提供的参数才能移除事件处理程序。在你的问题中,
$('#link').off('click').on('click',function(){});

它将简单地删除附加到该事件的任何先前事件处理程序并创建一个新的。

1

当我们知道没有其他的点击函数已经绑定到该元素时,或者即使有另一个点击函数绑定了,也不会妨碍我们的点击功能,我们使用$('#link').on('click',function(){});。我们使用.off从所有位置解除(停止)该元素的点击功能,然后我们使用.on click仅绑定我们的点击功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接