preventDefault()和off('click')之间的区别

时间:2017-03-14 11:24:08

标签: javascript jquery preventdefault

我使用on() JQuery函数和preventDefault()来防止锚定义操作。我无法理解off() JQuery函数。我可以使用off('click')代替:

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

我的意思是,我可以使用它来防止锚的默认动作吗?

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

4 个答案:

答案 0 :(得分:2)

不,根据.off()的文档:

  

.off()方法会删除附加了.on()

的事件处理程序

所以off()只删除jQuery添加的处理程序。但默认处理程序,例如在preventDefault()上必须阻止在链接或提交按钮上。

答案 1 :(得分:1)

off:禁用eventHandler,因此单击时不能执行任何功能 preventdefault:禁用默认的eventHandler,但你可以使用自己的函数。

答案 2 :(得分: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');

答案 3 :(得分:0)

off将删除之前附加到其上的事件处理程序。

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

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

例如

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

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

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