event.preventDefault() vs. return false
当我想阻止其他事件处理程序在触发某个事件后执行时,我可以使用两种技术之一。我将在示例中使用jquery,但这也适用于纯JS:
1。1 2 3 4 | $('a').click(function (e) { // custom handling here e.preventDefault(); }); |
2。
1 2 3 4 | $('a').click(function () { // custom handling here return false; }); |
这两种阻止事件传播的方法有什么显著区别吗?
对我来说,
另外,我必须在回调中定义第一个参数,以便能够调用该方法。也许,我有一些理由不应该这样做,而是使用
jquery事件处理程序中的
资料来源:John Resig
使用event.preventDefault()而不是"return false"取消一个href单击有什么好处吗?
根据我的经验,使用event.preventDefault()比使用return false至少有一个明显的优势。假设您正在一个锚标记上捕获click事件,否则如果将用户从当前页面导航开,这将是一个大问题。如果单击处理程序使用RETURN FALSE阻止浏览器导航,则会打开解释程序无法到达RETURN语句的可能性,并且浏览器将继续执行定位标记的默认行为。
1 2 3 4 5 6 7 | $('a').click(function (e) { // custom handling here // oops...runtime error...where oh where will the href take me? return false; }); |
使用event.preventDefault()的好处是,您可以将其添加为处理程序中的第一行,从而确保锚的默认行为不会激发,无论函数的最后一行是否未到达(例如运行时错误)。
1 2 3 4 5 6 7 | $('a').click(function (e) { e.preventDefault(); // custom handling here // oops...runtime error, but at least the user isn't navigated away. }); |
正如您所说,这不是一个"javascript"问题;而是一个关于jquery设计的问题。
jquery和先前链接的JohnResig引用(在Karim79的消息中)似乎是事件处理程序在一般情况下如何工作的来源误解。
事实:返回false的事件处理程序会阻止该事件的默认操作。它不会停止事件传播。自从Netscape Navigator的旧时代以来,事件处理程序一直是这样工作的。
MDN的文档解释了事件处理程序中
jquery中发生的事情与事件处理程序中发生的事情不同。DOM事件监听器和MSIE"附加"事件是完全不同的事情。
有关进一步的阅读,请参阅msdn上的AttachEvent和W3CDom2事件文档。
一般来说,你的第一个选择(
燃料你的代码有一篇关于
使用jquery时,当您调用
有关更多信息和示例,请参阅jquery events:stop(mis)using return false。
对于一个元素,可以在
我想
是W3C指定的取消事件的方式。
您可以在W3C事件取消规范中阅读此内容。
同样,在任何情况下都不能使用返回错误。当在href属性中提供一个javascript函数时,如果返回false,那么用户将被重定向到一个写有false字符串的页面。
我认为最好的方法是使用
但是,如果您确信代码不会触发任何异常,那么您可以使用您希望使用的任何方法。
如果您仍然想使用返回的
1 2 3 4 5 6 7 | $('a').click(function (e) { try{ your code here......... } catch(e){} return false; }); |
e.preventDefault();
它只是停止元素的默认操作。
Instance Ex.:-
阻止超链接跟随URL,阻止"提交"按钮提交表单。当您有许多事件处理程序并且只想防止默认事件发生多次时,为此,我们需要在函数()的顶部使用。
Reason:-
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> </head> <body> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> Preventsss page from redirect <script type="text/javascript"> function doSomethingElse(){ console.log("This is Test..."); } $("a").click(function(e){ e.preventDefault(); }); </body> </html> |
返回错误;
它只是停止函数()的执行。
"EDOCX1"〔5〕将结束整个过程的执行。
Reason:-
使用RETURN FALSE的原因是您不希望在严格模式下再执行函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> </head> <body> Blah <script type="text/javascript"> function returnFalse(){ console.log("returns false without location redirection....") return false; location.href="http://www.google.com/"; } </body> </html> |
当你写"返回错误"时,它会在幕后为你做以下事情。
1 2 3 | * Stops callback execution and returns immediately when called. * event.stopPropagation(); * event.preventDefault(); |
根据我的经验,我认为最好使用
1 | event.preventDefault() |
实际无论何时,只要我们要求而不是
基本上,通过这种方式进行组合是因为jquery是一个主要关注HTML元素的框架,基本上可以防止默认值,但同时,可以停止传播以冒泡。
所以我们可以简单地说,在
返回false是e.preventDefault和e.stoppropagation
但也不要忘记,它都在jquery或与dom相关的函数中,当您在元素上运行它时,基本上,它会阻止所有的触发,包括默认行为和事件的传播。
基本上,在开始使用
所以基本上这段代码如下:
1 2 3 | $('div').click(function () { return false; }); |
等于此代码:
1 2 3 4 | $('div').click(function (event) { event.preventDefault(); event.stopPropagation(); }); |