【发布时间】:2017-04-12 20:50:50
【问题描述】:
我正在编写一个拖放处理程序,并希望将eventListeners 设置为最高级别——我猜想是body。但是,我在example at MDN 中注意到,他们将听众设置为document 与document.body,这让我问为什么这会更可取,一般来说,为什么我会选择附加到一个而不是另一个的听众(并且做它们都支持相同的侦听器)?
那么我什么时候使用document.body.addeventListener() 和document.addEventListener()?
更新This SO question 解决了将事件绑定到document 而不是element 级别的时间。很有帮助。
UPDATE2 有趣的是,当为所有拖放侦听器设置document.addEventListener() 时,Firefox 会因拖动而挂起(Chrome 不会)。当我将其更改为 document.body.addEventListener() for dragEnter, dragOver, dragLeave, drop 时,一切正常。似乎dragStart 想加入document。
【问题讨论】:
-
“我正在编写拖放处理程序” 为什么不将处理程序附加到发生拖放的元素上?
-
@guest271314 - 如果我有 1000 个可以拖放的元素,我可以将 6 个 eventListener
(dragStart, dragEnter, dragOver, dragLeave, drop, dragStop)附加到所有 1000 个元素,或者将这些附加到document并处理要处理的内容处理事件target。由于无论如何我都必须处理target,因此拥有一个全局处理程序似乎更有效。 -
@Tareq - 感谢您的链接。那篇文章链接了a SO question,这非常有帮助。
标签: javascript dom-events