"on"preventDefault

mpl*_*jan 6 jquery event-handling jquery-mobile

我在这里错过了什么?

请注意:使用jQuery MOBILE

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

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

HTML

<div id="leftdiv" style="position:absolute;padding-right:5%; overflow:scroll;">
<a href="page1.htm">Launch page 1</a><br />
<a href="page2.htm">Launch page 2</a>
</div>

<div id="rightDiv" style="padding-left:30%"></div>
Run Code Online (Sandbox Code Playgroud)

mas*_*gns 16

e.preventDefault();
Run Code Online (Sandbox Code Playgroud)

没用?

$('a').on("click",function(e){
     //do something
     e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

放在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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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