由于我一直在阅读有关原生拖放事件的教程,因此在调用e.preventDefault
之前,我遇到了检查e.preventDefault()
的条件。这个条件写成:
e.preventDefault && e.preventDefault();
或
if (e.preventDefault) {
e.preventDefault();
}
Remy Sharp的Native Drag and Drop教程,Remy Sharp的Drag and Drop and Automatically Send to the Server和Matt West的Implementing Native Drag and Drop。
我以前从未遇到过这种模式。我习惯于在没有条件的情况下看到e.preventDefault()
。什么时候e.preventDefault
是假的,最好在每个调用e.preventDefault
的情况下使用这种措辞?
答案 0 :(得分:2)
似乎每个浏览器的preventDefault行为都是not standardized。它解释了为什么jQuery在它的Event对象包装器中有一个wrapper for the native preventDefault(),使它始终存在且更具可预测性。在这种情况下,您不必对preventDefault及其值进行额外测试,但可以假设它在事件发生的地方可用。但是,如果你没有像jQuery这样的抽象库,你仍然需要进行额外的测试。 jQuery的代码似乎是一个很好的指南。
答案 1 :(得分:1)
如果Javascript找不到该函数(浏览器没有此函数),那将是错误的,但无论如何它应该是“undefined”,它将被转换为false。如果要保持与旧版浏览器的兼容性,则每次调用此函数时都应该使用它。
e.preventDefault && e.preventDefault ()
如果第一个条件为真,则执行。无论如何,在jQuery中你可以找到一种通用的方法来实现它。
例如,如果我不记得错了,某些浏览器(IE?)可以使用e.returnValue来避免执行默认操作代码。
您添加的两个代码是相同的,并且也是相同的。
答案 2 :(得分:1)
e.preventDefault什么时候会变得麻烦?
在不遵守DOM规范的非常旧的浏览器中,它将是未定义的,例如IE<=8。
最佳做法是在每个调用e.preventDefault的实例中使用这种措辞吗?
没有。通过标准DOM方法附加的监听器也可以期望此方法存在。如果你关心旧的浏览器,你通常会使用一个框架来支持这些浏览器。