当我一直在阅读关于本地拖放事件的教程时,我遇到了一个在调用e.preventDefault()
之前检查e.preventDefault
的条件。这个条件可以写成:
e.preventDefault && e.preventDefault();
或
if (e.preventDefault) {
e.preventDefault();
}
教程是Remy Sharp的原生拖放, Remy Sharp的拖放并自动发送到服务器,以及Matt West的实现原生拖放。
我以前从未遇到过这种模式。我已经习惯了不带条件调用e.preventDefault()
。什么时候e.preventDefault
是假的,在e.preventDefault
被调用的每个实例中使用这个短语是最佳实践吗?
看起来preventDefault行为并不是跨浏览器标准化的。它解释了为什么jQuery在它的Event对象包装器中有一个本机preventDefault()的包装器,使其始终呈现并且更可预测。在这种情况下,您不必为preventDefault和它的值做额外的测试,但可以假设它在事件所在的位置可用。但是,如果没有jQuery这样的抽象库,您仍然需要进行额外的测试。jQuery的代码似乎是一个很好的指南。
如果Javascript找不到这个函数(浏览器没有这个函数),它将为false,但无论如何它应该是"undefined",它将被转换为false。如果您希望与旧浏览器保持兼容性,则应该在每次调用此函数时使用它。
e.preventDefault && e.preventDefault ()
如果第一个条件为真,则执行该条件。无论如何,在jQuery中你可以找到一种通用的方法来做到这一点。
示例,如果我没记错的话,一些浏览器(IE?)可以使用e.returnValue来避免执行默认的操作代码。
你添加的两个代码是同一件事,做同样的事情。
e.preventDefault何时为false ?
在不尊重DOM规范的非常老的浏览器中,例如IE<=8,它将是未定义的。
在调用e.p preventdefault的每个实例中使用这个短语是最佳实践吗?
。通过标准DOM方法附加的侦听器也可以期望该方法存在。如果你关心旧的浏览器,你通常需要一个框架来显示这些