在阅读关于本机拖放事件的教程时,我遇到了一个条件,即在调用e.preventDefault之前检查e.preventDefault()。这个条件可以写成:
e.preventDefault && e.preventDefault();或
if (e.preventDefault) {
e.preventDefault();
}教程是雷米夏普的http://html5doctor.com/native-drag-and-drop/,雷米夏普的http://html5doctor.com/drag-and-drop-to-server/和马特韦斯特的http://blog.teamtreehouse.com/implementing-native-drag-and-drop。
我以前从未遇到过这种模式。我习惯于看到e.preventDefault()不带条件地被调用。什么时候e.preventDefault会是错误的,在调用e.preventDefault的每个实例中使用这个短语是最好的做法吗?
发布于 2014-05-05 15:47:55
preventDefault行为似乎是跨浏览器的不标准化。它解释了为什么jQuery在它的事件对象包装器中有一个本机preventDefault()的包装器,使它始终存在并且更可预测。在这种情况下,您将不必对preventDefault和它的值进行额外的测试,而只需假设事件在哪里都可用。但是,如果您在没有像jQuery这样的抽象库的情况下工作,则仍然需要进行额外的测试。jQuery的代码似乎是一个很好的指南。
发布于 2014-05-05 13:30:18
如果Javascript找不到函数(浏览器没有这个函数),它将是假的,但是无论如何,它应该是“未定义的”,它将被转换为false。如果您想要保持与旧浏览器的兼容性,则每次调用此函数时都应该使用该函数。
e.preventDefault && e.preventDefault ()如果第一个条件为真,它将被执行。无论如何,在jQuery中,您可以找到一种通用的方法来实现它。
例如,如果我不记得错了,一些浏览器(IE?)可以使用e.returnValue来避免执行默认操作代码。
你添加的两个代码是相同的,也是一样的。
发布于 2014-05-05 14:01:45
什么时候e.preventDefault会是假的?
它将在不尊重DOM规范(如IE<=8 )的非常旧的浏览器中未定义。
在调用e.preventDefault的每个实例中使用这种短语是最佳实践吗?
不是的。通过标准DOM方法附加的侦听器也可以预期此方法的存在。如果您关心较旧的浏览器,您通常会使用一个框架来对这些浏览器进行修改。
https://stackoverflow.com/questions/23473600
复制相似问题