“on”preventDefault

我在这里想念的是什么?

请注意:使用jQuery MOBILE

  • DEMO使用preventDefault

  • DEMO使用return false

如果我使用preventDefault页面加载就好像我只有链接而没有脚本,当我改为返回false(我总是习惯在普通的JS onclick事件处理程序上使用)时,它按预期工作。 我已经查看了其他post,并且都使用了.click,并建议使用preventDefault。

$(document).ready(function() { $("#leftdiv a").on("click",function(e) { $("#rightDiv").load(this.href); return false; // I was sure preventDefault would work }); }); 

HTML

  

 e.preventDefault(); 

没用?

 $('a').on("click",function(e){ //do something e.preventDefault(); }); 

e.preventDefault(); 在代码的顶部或末尾无关紧要。 我猜还有方法e.stop() 。 但是你为什么不坚持return false; 什么时候它适合你?

来自jQuery移动文档:

取消元素默认点击行为

应用程序可以在vclick事件上调用preventDefault()来取消元素的默认单击行为。 在基于鼠标的设备上,在vclick事件上调用preventDefault()等同于在冒泡事件阶段对真实点击事件调用preventDefault()。 在基于触摸的设备上,由于实际的点击事件在调度vclick事件后大约300ms被调度,因此它有点复杂。 对于触摸设备,在vclick事件上调用preventDefault()会触发vmouse插件中的一些代码,这些代码会尝试捕获浏览器在捕获事件阶段调度的下一个单击事件,并调用preventDefault()和stopPropagation()on它。 如上面的警告所述,有时很难将触摸事件与其相应的鼠标事件进行匹配,因为目标可能不同。 出于这个原因,vmouse插件也会回退到尝试通过坐标识别相应的点击事件。 仍然存在目标和坐标识别都失败的情况,这导致分派事件并且触发元素的默认操作,或者在内容被移位或替换的情况下,触发对不同元素的点击。 如果这种情况经常发生在给定的元素/控件上,我们建议您使用click来触发您的操作。

 function() { return false; } // IS EQUAL TO function(e) { e.preventDefault(); e.stopPropagation(); } 

资料来源: http //css-tricks.com/return-false-and-prevent-default/

似乎也不支持.on()也不支持document.ready

资料来源: http //jquerymobile.com/test/docs/api/events.html

这可能会提供解决方案,但我缺乏解释原因的信息。 我最近遇到过preventDefault在类似代码中没有工作的问题,问题在于从$(document) vs $('body')委托尝试以下方法:

 Test 1 Test 2  

然而,对于jQuery 3.2.1,这不会发生,我只能确认这是2.1.7的问题