为什么 if 语句带有 e.preventDefault ? - 拖放 javascript
why if statement with e.preventDefault ? - drag and drop javascript
我正在按照这个例子制作一个 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 中的新手解释这一点的人。
谢谢!
第一次调用实际上并不是调用函数,而是简单地检查它是否已定义。该代码基本上是在询问 "is the e.preventDefault()
method defined?" ,然后如果是:
则执行它
// 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;
通常这样的陈述与浏览器兼容性有关。例如,某些浏览器可能没有实现 preventDefault()
功能。也就是说,我不知道有哪个浏览器有这个问题。
旧版本的 Internet Explorer 不会 将事件对象作为参数传递,而是事件在全局范围内(即 window.event
)。但是这段代码并没有防止这种情况发生,因为如果 e
未定义 if(e.preventDefault)
将抛出异常。
另一个可能的原因是 handleDragOver
不仅仅是从事件监听器调用的。在示例代码中,情况并非如此,但也许在某些时候需要这样做。我认为这是一种不好的做法,事件监听器应该只有一个输入参数,而且它应该始终是一个事件。
我相信您可以删除 if
声明。
我正在按照这个例子制作一个 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 中的新手解释这一点的人。
谢谢!
第一次调用实际上并不是调用函数,而是简单地检查它是否已定义。该代码基本上是在询问 "is the e.preventDefault()
method defined?" ,然后如果是:
// 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;
通常这样的陈述与浏览器兼容性有关。例如,某些浏览器可能没有实现 preventDefault()
功能。也就是说,我不知道有哪个浏览器有这个问题。
旧版本的 Internet Explorer 不会 将事件对象作为参数传递,而是事件在全局范围内(即 window.event
)。但是这段代码并没有防止这种情况发生,因为如果 e
未定义 if(e.preventDefault)
将抛出异常。
另一个可能的原因是 handleDragOver
不仅仅是从事件监听器调用的。在示例代码中,情况并非如此,但也许在某些时候需要这样做。我认为这是一种不好的做法,事件监听器应该只有一个输入参数,而且它应该始终是一个事件。
我相信您可以删除 if
声明。