【发布时间】:2012-06-08 03:31:31
【问题描述】:
概述
我想将一个事件附加到一个元素以处理文件拖放事件,但似乎这个事件也被附加到所有子元素。例如,
$('#dragtarget').on('dragenter', function() {
console.log('dragenter');
});
...如果我将文件拖到#dragtarget 元素的任何子元素上,控制台将输出dragenter。因此,如果我将此事件附加到 document 或 window,当鼠标悬停在页面上的任何元素上时,该事件将触发。
dragleave 也会发生同样的事情,除了离开子元素时。
问题
为什么会这样?是否可以将此事件附加到 only 预期的元素?如果没有,有没有办法将事件与所有子元素分离?
jsFiddle
这是一个可以修改的示例:http://jsfiddle.net/UnsungHero97/ePLV6/7/
请注意,当您将文件拖到框上时,边框如何变为实线,但在将鼠标悬停在文本上时又变为虚线
无论我是否将鼠标悬停在框中的文本上,我都希望在将文件拖动到框上时将边框变为实线
这是小提琴中的代码以防万一:
HTML
<div id="dragtarget">
<span>File over/out here</span>
<br/><br/>
<span>more text here</span>
</div>
JS
// I expect only the #dragtarget element to fire the 'dragenter' and 'dragleave' events,
// not the child elements
$('#dragtarget').on('dragenter', function() {
$(this).css({borderStyle: 'solid'});
event.stopPropagation();
event.preventDefault();
return false;
}).on('dragleave', function() {
$(this).css({borderStyle: 'dashed'});
event.stopPropagation();
event.preventDefault();
return false;
});
【问题讨论】:
-
我在您的演示中没有看到 任何 边框更改...
-
拍摄...我没有说明这是关于文件拖放的。
-
我还在小提琴中拼错了选择器。
标签: jquery html file-upload drag-and-drop