【发布时间】:2020-09-24 10:07:48
【问题描述】:
这是我的代码。 我用不同的选择器定义了两个不同的 drop 事件,但是父事件覆盖了子 drop。
//this is parent
for(let i=0 ; i < $(".Droppable").length; ++i)
{
document.querySelectorAll(".Droppable")[i].addEventListener("drop",function (ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
var copyimg= document.createElement("img");
var orignal= document.getElementById(data);
copyimg.src=orignal.src;
copyimg.alt=orignal.alt;
copyimg.style.zIndex=2
copyimg.classList.add("Droppable2");
ev.target.appendChild(copyimg);
copyimg.style.position="fixed";
copyimg.style.left=ev.clientX+"px";
copyimg.style.top=ev.clientY+"px";
} );
document.querySelectorAll(".Droppable")[i].addEventListener("dragover" ,function(ev){
ev.preventDefault();
});
}
父“drop”用于 a,子“drop:”用于 . 我想在客户端放在图像上时分配一个特定的功能。
//this is child
for(let i=0;i<$(".Droppable2").length;++i)
{ document.querySelectorAll(".Droppable2")[i].addEventListener("drop",function (ev) {
ev.preventDefault();
var data=ev.dataTransfer.getData('text');
myExperiment.Add(Number(data));
alert("test is" + myExperiment.test+" indication is"+myExperiment.indication);
} );
document.querySelectorAll(".Droppable2")[i].addEventListener("dragover" ,function(ev){
ev.preventDefault();
});
}
这是我的小提琴:https://jsfiddle.net/Bhavesh21/1haokeum/5/ aliceblue div 是工作区,您可以将设备和反应物拖到工作区。 如果您首先将 SampleTestTube 拖到工作区,然后将试剂拖到它上面,那么与图像关联的侦听器将无法正常工作。
另一方面,如果您将 Reagent 直接拖到设备中的 SampleTestTube 上,它可以工作。
【问题讨论】:
-
如果不希望 drop 事件从子事件传播到父事件,可以在子事件中添加 ev.stopPropagation()。
-
只有父监听器在触发而不是子监听器。所以我不认为这是因为冒泡。
-
您能否提供您的问题的 jsfiddle(或等价物)以便我们查看问题?
-
我添加了小提琴并更清楚地解释了我的问题。
标签: javascript html drag-and-drop html5-draggable