我正在按照这个例子制作一个javascript html5 DnD(拖放):http://www.html5rocks.com/en/tutorials/dnd/basics/
为防止某些浏览器的默认行为,将阻止默认事件。我理解需要。但为什么还有if语句?
function handleDragOver(e) {
if (e.preventDefault) {
e.preventDefault(); // Necessary. Allows us to drop.
}
//为什么这个if语句?, 对我而言似乎是双重的: 如果它已经存在(如果是),那么再做一次......?
感谢任何有时间用JavaScript解释这个新手的人。
谢谢!
答案 0 :(得分:0)
第一个调用实际上并不是调用函数,只是检查它是否已定义。代码基本上是问“是e.preventDefault()
方法定义的吗?”如果是,则执行它:
// Is preventDefault() currently defined?
if (e.preventDefault) {
// Then do it.
e.preventDefault();
}
可能的推理
存在这种情况的可能原因是support for event.preventDefault()
wasn't added in Internet Explorer until IE9,因此在IE9之前的那些黑暗中,类似以下的代码可能更常见:
// An example of a pre-IE9 check for preventing default events
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
答案 1 :(得分:0)
通常这样的陈述与浏览器兼容性有关。例如,某些浏览器可能没有实现preventDefault()
功能。话虽如此,我不知道任何有这个问题的浏览器。
旧版本的Internet Explorer 不将事件对象作为参数传递,而是事件在全局范围内(即window.event
)。但是这段代码并不能防止这种情况,因为如果e
未定义,if(e.preventDefault)
会抛出异常。
另一个候选原因是handleDragOver
不仅仅是来自eventlistener。在示例代码中,情况并非如此,但可能在某些时候需要这样做。我认为这是不好的做法,eventlistener应该只有一个输入参数,它应该始终是一个事件。
我确信您可以删除if
声明。