event.preventDefault() 与返回 false

问:

当我想在某个事件被触发后阻止其他事件处理程序执行时,我可以使用两种技术之一。我将在示例中使用 jQuery,但这也适用于纯 JS:

  1. event.preventDefault()
$('a').click(function (e) {
    // custom handling here
    e.preventDefault();
});

2.返回假

$('a').click(function () {
    // custom handling here
    return false;
});

这两种停止事件传播的方法之间有什么显着区别吗?

对我来说,return false; 比执行方法更简单、更短并且可能更不容易出错。使用该方法,您必须记住正确的大小写、括号等。

另外,我必须在回调中定义第一个参数才能调用该方法。也许,有一些原因我应该避免这样做并使用 preventDefault 代替?有什么更好的方法?

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

在 jQuery 事件处理程序中 中的 return false 实际上与在传递的 jQuery.Event object. 上调用 e.preventDefault 和 e.stopPropagation 相同

e.preventDefault() 将阻止默认事件发生,e.stopPropagation() 将阻止事件冒泡,而 return false 将同时执行这两项操作。请注意,此行为不同于 普通(非 jQuery)事件处理程序,其中值得注意的是,return false not 阻止事件冒泡。

来源:John Resig

Any benefit to using event.preventDefault() over “return false” to cancel out an href click?

来自 DOM2 处理程序 (addEventListener) 的 return false 什么都不做(既不会阻止默认值,也不会停止冒泡;来自 Microsoft DOM2-ish 处理程序 (attachEvent),它会阻止默认值但不冒泡;来自 DOM0 处理程序(onclick="return ..."),它会阻止默认值(假设您在属性中包含 return)但不会冒泡;对于 jQuery 事件处理程序,它会同时执行这两种操作,因为这是 jQuery 的事情。Details and live tests here

在这里定义“传播”和“默认”会很有帮助。我一直在混淆他们。这个对吗?传播 = 我的代码(父元素的 JavaScript 事件处理程序)。默认 = 浏览器代码(链接、文本选择等)

冒泡的真正含义是什么?例子?

+1 注意到 return false 确实 not 停止非 jQuery 事件处理程序中的事件传播。即Test不会阻止事件冒泡。

答2:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

根据我的经验,使用 event.preventDefault() 比使用 return false 至少有一个明显的优势。假设您正在捕获锚标记上的点击事件,否则如果用户被导航离开当前页面,这将是一个大问题。如果您的单击处理程序使用 return false 来阻止浏览器导航,则可能会导致解释器无法到达 return 语句,并且浏览器将继续执行锚标记的默认行为。

$('a').click(function (e) {
  // custom handling here

  // oops...runtime error...where oh where will the href take me?

  return false;
});

使用 event.preventDefault() 的好处是您可以将其添加为处理程序的第一行,从而保证锚的默认行为不会触发,无论是否未到达函数的最后一行(例如运行时错误)。

$('a').click(function (e) {
  e.preventDefault();

  // custom handling here

  // oops...runtime error, but at least the user isn't navigated away.
});

虽然确实如此,但在进行渐进增强时通常更可取相反的行为(我认为这可能是覆盖默认操作的最可能原因)

两者都是阻止事件默认行为的方法,这只是您要解决的问题的问题。

答3:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

正如你所说的,这不是一个“JavaScript”问题。这是一个关于 jQuery 设计的问题。

jQuery 和 John Resig 中的 previously linked citation(在 karim79’s message 中)似乎是对事件处理程序一般工作方式的误解的根源。

事实:返回 false 的事件处理程序会阻止该事件的默认操作。它不会停止事件传播。自 Netscape Navigator 的旧时代以来,事件处理程序一直以这种方式工作。

documentation from MDN 解释了事件处理程序中的 return false 如何工作

jQuery 中发生的事情与事件处理程序中发生的事情不同。 DOM 事件侦听器和 MSIE “附加”事件完全不同。

如需进一步阅读,请参阅 attachEvent on MSDN 和 W3C DOM 2 Events documentation。

@rds 说“preventDefault 不会阻止事件通过 DOM 进一步传播。应该使用 event.stopPropagation。”

关于一个密切相关的问题的 answer 声称,在 HTML 5 之前,从事件处理程序返回 false 并没有指定做任何事情。现在,这可能是对(难以理解的)规范的错误解释,或者尽管没有按字面定义,但所有浏览器都将 return false 解释为与 event.preventDefault() 相同。但我不知道;这足以让我用一小撮盐吃这个。

我讨厌谷歌中的每个 javascript 搜索结果实际上都是关于 jQuery,+1

他将其标记为 JavaScript 和 jQuery,两者都是正确的。 jQuery 只是 JavaScript 的一个子集,而不是它自己的语言。

答4:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

通常,您的第一个选项 (preventDefault()) 是您可以选择的选项,但您必须知道您所处的环境以及您的目标是什么。

为您的编码加油有一个很棒的article on return false; vs event.preventDefault() vs event.stopPropagation() vs event.stopImmediatePropagation()。

@VisruthCV 查看我添加的注释以及存档版本的链接

答5:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

使用 jQuery 时,return false 在您调用它时会做 3 件不同的事情:

event.preventDefault(); event.stopPropagation();停止回调执行并在调用时立即返回。

有关更多信息和示例,请参阅 jQuery Events: Stop (Mis)Using Return False。

如果代码的其他部分正在监听这个事件,event.stopPropagation();会取消他们的回调吗?

答6:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

您可以在一个元素的 onClick 事件上挂起很多函数。您如何确定 false 将是最后一个触发?另一方面,preventDefault 肯定只会阻止元素的默认行为。

您不需要让最后一个事件处理程序返回 false。任何处理程序都可以返回 false 以防止默认行为。请参阅myprogrammingnotes.com/…

答7:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

我认为

event.preventDefault()

是 w3c 指定的取消事件的方式。

您可以在 Event cancelation 上的 W3C 规范中阅读此内容。

您也不能在每种情况下都使用 return false 。在 href 属性中提供 javascript 函数时,如果您返回 false,则用户将被重定向到写入 false 字符串的页面。

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

`在我见过的任何浏览器中都没有。也许您将其与 HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

我认为最好的方法是使用 event.preventDefault() 因为如果在处理程序中引发了一些异常,那么 return false 语句将被跳过并且行为将与您想要的相反。

但是,如果您确定代码不会触发任何异常,那么您可以使用任何您希望的方法。

如果您仍然想使用 return false,那么您可以将整个处理程序代码放在 try catch 块中,如下所示:

$('a').click(function (e) {
  try{
      your code here.........
  }
   catch(e){}
  return false;
});

答9:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

return false 和 event.preventDefault() 之间的主要区别在于,您在 return false 之下的代码将不会被执行,而在 event.preventDefault() 的情况下,您的代码将在此语句之后执行。

当您编写 return false 时,它会在幕后为您执行以下操作。

* Stops callback execution and returns immediately when called.
* event.stopPropagation();
* event.preventDefault();

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

答10:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

e.preventDefault();

它只是停止元素的默认操作。

实例示例:-

防止超链接跟随 URL,防止提交按钮提交表单。当您有许多事件处理程序并且您只想防止默认事件发生,并且多次发生时,我们需要在函数()的顶部使用。

原因:-

使用 e.preventDefault(); 的原因是在我们的代码中,如果代码出现问题,那么它将允许执行链接或表单以提交或允许执行或允许您需要执行的任何操作。 &链接或提交按钮将被提交 &仍然允许事件的进一步传播。

     阻止页面重定向  function doSomethingElse(){ console.log("This is Test..."); } $("a").click(function(e){ e.preventDefault(); });   

返回假;

它只是停止函数()的执行。

“return false;” 将结束整个进程的执行。

原因:-

使用return false的原因;是您不想再在严格模式下执行该功能。

    Blah  function returnFalse(){ console.log("returns false without location redirect ...") return false; location.href = "http://www.google.com/"; }   

答11:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

基本上,通过这种方式你可以组合事物,因为 jQuery 是一个主要关注 HTML 元素的框架,你基本上可以防止默认值,但同时,你会停止传播以冒泡。

所以我们可以简单地说,jQuery 中的 return false 等于:

返回 false 是 e.preventDefault AND e.stopPropagation

但也不要忘记它都在 jQuery 或 DOM 相关函数中,当您在元素上运行它时,基本上,它会阻止一切触发,包括默认行为和事件传播。

基本上在开始使用 return false; 之前,首先要了解 e.preventDefault(); 和 e.stopPropagation(); 的作用,然后如果您认为同时需要两者,那么只需使用它即可。

所以基本上下面的代码:

$('div').click(function () {
  return false;
});

等于此代码:

$('div').click(function (event) {
  event.preventDefault();
  event.stopPropagation();
});

原文链接:https://www.huntsbot.com/qa/kaEg/event-preventdefault-vs-return-false?lang=zh_CN&from=csdn

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值