阻止默认行为和off('click')的区别

3

我使用 on() JQuery 函数和 preventDefault() 来防止锚点的默认操作。我不理解 off() JQuery 函数。我能否使用 off('click') 代替:

$('.anchor').on('click', function(e) {
  e.preventDefault();
});

我的意思是,我能用这个来阻止超链接的默认操作吗?
$('.anchor').off('click');

off 禁用您添加的 click 事件处理程序。on 添加新的事件处理程序,您可以在其中防止默认事件(例如,在 href 中不打开链接)。 - Pavlo Zhukov
1
如果您阅读有关 off 和 preventDefault 的文档,这将是自我解释的。 - Huangism
4个回答

2

根据.off()文档的说明:

.off()方法会移除使用.on()添加的事件处理程序。

因此,off()仅会移除由jQuery添加的处理程序。但是默认的处理程序,例如链接或提交按钮上的处理程序,必须通过preventDefault()来防止。


1

off:禁用事件处理程序,因此无法在单击时执行任何函数 preventdefault:禁用默认事件处理程序,但您可以使用自己的函数。


1
他们在逻辑上非常不同。 preventDefault() 阻止浏览器对事件行为的响应,但仍会执行JS代码。例如,在下面的示例中,.anchor 元素指向的URL将不会被传输,但JS代码仍将运行:
$('.anchor').on('click',function(e){
    e.preventDefault();
    console.log('the browser wont redirect, but you will see this line in the console')
});

另一方面,off()会完全从元素中删除给定类型的任何事件处理程序。在这种情况下,单击时浏览器将转移到给定的URL,并且不会运行任何JS代码。
$('.anchor').off('click');

0

off会删除之前连接到它的事件处理程序。

但它不会停止元素的默认行为。

您可以将多个事件添加到单个选择器中。

例如

$('somElem').on('click',function(){
   // rest of code
})

$('somElem').on('someOtherEvent',function(){
   // rest of code
})

因此,在触发someOtherEvent之前,它将删除附加到该元素的任何其他事件。


标签元素的意思并不相同。在这个上下文中,后者是正确的。 - Fabian Klötzl

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