jQuery事件处理return false与event.preventDefault()

可能在你刚开始学习关于jQuery事件处理时,看到的第一个例子就是关于如何阻止浏览器执行默认行为,比如下面这段演示click事件的代码:1.$("a.toggle").click(function(){2.$("#mydiv").toggle();3.returnfalse;//Preventbrowserfromvisiting`#`4.});这个函数使用toggle来显示或者隐藏#mydiv,然后阻止浏览器继续访问href中指定的链接。像上面这样的例子会让用户养成使用“returnfalse”来阻止浏览器执行默认行为的坏习惯,在这篇文章里,我将会讨论关于阻止浏览器执行默认行为的两个非常重要的主题:选择正确的方法:returnfalse还是preventDefault,stopPropagation或者stopImmediatePropagation选择合适的位置,开始,结束,还是中间某个地方:你应该在事件回调的哪个部分取消浏览器执行默认行为?注意:当我在这篇文章中提到eventbubbling(事件冒泡),我想表达的是大部分事件都是先在初始DOM上触发,然后再通过DOM树往上,在每一级父元素上触发,事件不会在兄弟节点或是子节点上冒泡(当事件向下冒泡时,我们叫它事件捕捉(eventcapturing)),你可以在这里了解更多关于事件起泡和捕捉的介绍。选择正确的方法“returnfalse”之所以被误用的如此厉害,是因为它看起来像是完成了我们交给它的工作,浏览器不会再将我们重定向到href中的链接,表单也不会被继续提交,但这么做到底有什么不对呢?”returnfalse“到底做了什么?当你每次调用”returnfalse“的时候,它实际上做了3件事情:event.preventDefault();event.stopPropagation();停止回调函数执行并立即返回。“等等”,你叫了起来!我只是想让浏览器停止继续执行默认行为而已,我不需要它去做另外2件事。这3件事中用来阻止浏览器继续执行默认行为的只有preventDefault,除非你想要停止事件冒泡,否则使用returnfalse会为你的代码埋下很大的隐患,让我们通过一个真实的例子来看看这样的误用会造成什么后果:这是我们用来演示的HTML:1.<divclass="post">2.<h2><ahref="heikezhi/path/to/page">MyPage</a></h2>3.<divclass="content">4.Teasertext...5.</div>6.</div>7.<divclass="post">8.<h2><ahref="heikezhi/path/to/other_page">MyOtherPage</a></h2>9.<divclass="content">10.Teasertext...11.</div>12.</div>现在假设我们想要在用户点击文章标题时,将文章动态载入到div.contentd中:1.jQuery(document).ready(function($){2.$("div.posth2a").click(function(){3.vara=$(this),4.href=a.attr('href'),//LetjQuerynormalize`href`,5.content=a.parent().next();6.content.load(href+"#content");7.returnfalse;//"cancel"thedefaultbehavioroffollowingthelink8.});9.});这段代码可以正常工作(至少目前是),但如果我们顺着这个思路继续,如果我想要在用户点击了一个div.post元素(或者任何一个它的子元素)时,给它加上一个active类,我就需要给div.post增加了一个click回调:1.//InsideDocumentReady:2.varposts=$("div.post");3.posts.click(function(){4.//Removeactivefromalldiv.post5.posts.removeClass("active");6.//Additbacktothisone7.$(this).addClass("active");8.});现在,如果我们点击一个帖子的标题,这段代码会工作吗?答案是不会,因为我们在标题的click回调里使用了returnfalse而不是我们应该使用的,”returnfalse“等于event.preventDefault();加event.stopPropagation();,所以事件冒泡就被终止了,click事件不会被冒泡到div.post上,我们为它添加的事件回调当然也就不会被调用了。如果我们把它和live或者delegate事件混在一起使用时,情况就更糟了。1.$("a").click(function(){2.//dosomething3.returnfalse;4.});5.6.$("a").live("click",function(){7.//THISWON'TFIRE8.});那么我们真正需要的是什么呢?preventDefault()大多数情况下,当你使用returnfalse时,你其实真正需要的是e.preventDefault()。要使用e.preventDefault,你需要确保你传递了event参数到你的回掉函数中(在这个例子里,就是那个e):1.$("a").click(function(e){2.//e==oureventdata3.e.preventDefault();4....

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?