Javascript preventDefault()和off之间的差异(';单击';)

Javascript preventDefault()和off之间的差异(';单击';),javascript,jquery,preventdefault,Javascript,Jquery,Preventdefault,我使用on()JQuery函数和preventDefault()来防止锚定默认操作。我无法理解off()JQuery函数。我可以使用off('click')而不是: $('.anchor').on('click', function(e) { e.preventDefault(); }); 我的意思是,我可以用它来防止锚的默认动作吗 $('.anchor').off('click'); 否,根据以下文件: .off()方法删除附加了.on()的事件处理程序 因此off()只删除jQuer

我使用
on()
JQuery函数和
preventDefault()
来防止锚定默认操作。我无法理解
off()
JQuery函数。我可以使用
off('click')
而不是:

$('.anchor').on('click', function(e) {
  e.preventDefault();
});
我的意思是,我可以用它来防止锚的默认动作吗

$('.anchor').off('click');

否,根据以下文件:

.off()
方法删除附加了
.on()
的事件处理程序


因此
off()
只删除jQuery添加的处理程序。但是默认处理程序,例如链接或提交按钮上的默认处理程序,必须通过
preventDefault()
禁用:禁用eventHandler,以便在单击时无法执行任何函数 preventdefault:禁用默认事件处理程序,但您可以使用自己的函数。

将删除以前附加到它的事件处理程序

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

可以向单个选择器添加多个事件

比如说

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

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

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

它们在逻辑上非常不同

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');

off
禁用
单击添加的事件处理程序
on
addneweventhandler,您可以在其中阻止默认事件(链接未打开,例如在href中)。如果您阅读文档on-off和preventDefaulttag并不表示与元素相同,则这是不言自明的。后者在这方面是正确的。