【问题标题】:peventDefault() and return false in addEventListenerpeventDefault() 并在 addEventListener 中返回 false
【发布时间】:2017-07-16 11:46:03
【问题描述】:
2 个问题。
- 为什么
e.preventDefault();不能写return false;? (它不起作用)虽然在通过menu.onclick = func.. return false; 的活动目的的情况下有效。
- 为什么三元运算符不能使用
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 && action()。
标签:
javascript
function
operators
【解决方案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>
- 为什么三元运算符不能用return,不能忽略以“:”开头的部分?
条件运算符由三个表达式组成,由? 和: 分隔。表达式不能包含return。
但是,由于条件运算符的计算结果是一个值(这就是它的用途),您可以return 它计算的值:
return somethingIsTrue ? 'yay!' : 'no!';
您似乎正在尝试将条件表达式用作if-else 语句的惰性替代,但它不能替代if-else 语句。如果您想使用if-else 语句,请使用一个。
我不知道“不可能忽略以:”开头的部分是什么意思。