【问题标题】:peventDefault() and return false in addEventListenerpeventDefault() 并在 addEventListener 中返回 false
【发布时间】:2017-07-16 11:46:03
【问题描述】:

2 个问题。

  1. 为什么e.preventDefault();不能写return false;? (它不起作用)虽然在通过menu.onclick = func.. return false; 的活动目的的情况下有效。
  2. 为什么三元运算符不能使用return这个词,而且不能忽略以“:”开头的部分?

分配给父元素的处理程序 标记 div#menu > ul > li > a

<div id="menu">
  <ul>
    <li><a href="...">link</a></li>
  </ul>
</div>
 menu.addEventListener("click", disableLinks, false);

 function disableLinks(e) {
     e.target.nodeName == "A" ? e.preventDefault() : true;
 }

【问题讨论】:

  • 1.请看两种方法的区别here; 2.你可以return和三元运算符这样:return condition ? 'thing' : 'other thing';如果你想忽略三元的最后一部分,你应该使用构造condition &amp;&amp; action()

标签: javascript function operators


【解决方案1】:
  1. 为什么是 e.preventDefault();你不能写return false; ? (它不起作用)虽然在通过 menu.onclick = func.. 的事件目的的情况下返回 false;有效。

这就是它的工作方式。添加内联(在 HTML 属性中)或直接分配给 onclick 属性的事件可以通过返回 false 来取消。对于使用.addEventListener() 添加的事件,您可以使用e.returnValue = false 来实现相同的效果,但.preventDefault() 是防止默认行为的标准方法。 AFAIK,返回 false 的选项未在 W3C 标准中定义。

var menu = document.getElementById('menu');
menu.addEventListener("click", disableLinks, false);

function disableLinks(e) {
    e.returnValue = false;
}
<div id="menu">
  <ul>
    <li><a href="http://www.yahoo.com">link</a></li>
  </ul>
</div>
  1. 为什么三元运算符不能用return,不能忽略以“:”开头的部分?

条件运算符由三个表达式组成,由?: 分隔。表达式不能包含return

但是,由于条件运算符的计算结果是一个值(这就是它的用途),您可以return 它计算的值:

return somethingIsTrue ? 'yay!' : 'no!';

您似乎正在尝试将条件表达式用作if-else 语句的惰性替代,但它不能替代if-else 语句。如果您想使用if-else 语句,请使用一个。

我不知道“不可能忽略以:”开头的部分是什么意思。

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2015-06-22
    • 2015-05-09
    相关资源
    最近更新 更多