【发布时间】:2013-01-18 04:16:28
【问题描述】:
我正在尝试创建文件拖放处理程序(将文件拖到浏览器窗口中,用于上传)。
由于某种原因,当我将拖放侦听器绑定到 $("body") 而不是正文中的 $("div") 时,事件会连续触发多次,有时甚至是不间断的(看似循环)。这可能是什么原因造成的?
这是代码的精简版:http://jsfiddle.net/WxMwK/9/
var over = false;
$("body")
.on("dragover", function(e){
e.preventDefault();
if (! over) {
over = true;
$("ul").append($("<li/>").text("dragover"));
}
})
.on("dragleave", function(e){
e.preventDefault();
if (over) {
over = false;
$("ul").append($("<li/>").text("dragleave"));
}
})
.on("drop", function(e){
e.preventDefault();
if (over) {
over = false;
$("ul").append($("<li/>").text("drop"));
}
});
测试:将文件拖入橙色区域,您将看到该事件连续触发多次。
【问题讨论】:
-
不理解你的例子,但可能你应该使用 .stopPropagation() 来停止事件泡沫。这有时是多事件处理的原因..
-
api.jquery.com/event.preventDefault preventDefault 是 jquery 的 .stopPropagation() 方式。
-
preventDefault 正在阻止事件的默认行为(如果您单击链接,preventDefault 会避免跟随该链接)。停止传播停止事件冒泡。有2个不同的东西。如果在你写的api页面中搜索“传播”这个词,你什么都找不到。。
-
什么都不应该发生(在这个脚本中),只需处理拖动动作的输入/输出。当拖动到主体上方时,我想使屏幕变暗并显示一条消息,并在他们放下文件或离开屏幕时隐藏它。
-
我相信你对冒泡是正确的。我要试试。
标签: javascript jquery drag-and-drop