Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使事件处理程序忽略子事件_Javascript_Html_Events_Dom Events - Fatal编程技术网

Javascript 使事件处理程序忽略子事件

Javascript 使事件处理程序忽略子事件,javascript,html,events,dom-events,Javascript,Html,Events,Dom Events,假设我有一个类似于下面的代码,这是非常简单的,但相对来说,想法是相同的 东西 我希望能够将另一个div拖到父div的顶部,并触发ondragenter和ondragleave的事件。这是可行的,但有一个问题。将项目拖到子项中时,事件也会触发。停止传播不起作用,因为它只是在子元素所在的位置创建了一个洞,而问题仍然存在 有没有办法完全忽略这个孩子?这样我就可以将物品拖入拖出孩子,而不会引发任何事件;它们只在物品进入和离开父对象时才会触发 我已经被困在这个问题上一个多星期了,如果有任何帮助,我将不胜感

假设我有一个类似于下面的代码,这是非常简单的,但相对来说,想法是相同的

东西 我希望能够将另一个div拖到父div的顶部,并触发ondragenter和ondragleave的事件。这是可行的,但有一个问题。将项目拖到子项中时,事件也会触发。停止传播不起作用,因为它只是在子元素所在的位置创建了一个洞,而问题仍然存在

有没有办法完全忽略这个孩子?这样我就可以将物品拖入拖出孩子,而不会引发任何事件;它们只在物品进入和离开父对象时才会触发

我已经被困在这个问题上一个多星期了,如果有任何帮助,我将不胜感激。

使用,您只需在最外层的父级上设置事件处理程序,并在那里处理所有事件。在处理程序中,您测试event.target以查看事件的源元素是什么,并且仅当该元素是您想要的元素时才继续

下面是一个单击事件示例:

document.querySelector.parent.addEventListenerclick,functionevent{ console.log单击了父级或子级。; //仅当事件源是父级而不是子级时才作出反应。 ifevent.target.classList.containsparent{ 警告您单击了父对象; } }; 单击父对象和子对象。只有父级将执行所需的操作。 我是父母 我是孩子
最后,我解决问题的方法是完全删除onleave事件。这是造成大多数问题的原因

所以,现在在Onter上,我只是检查currentTarget是否与以前访问过的currentTarget不同。如果是,请禁用以前访问过的currentTarget指示灯,并激活新的currentTarget指示灯


这实际上比我预期的要好,因为即使您离开卡片,指示器也会保持不变,但尚未输入新卡片。这样,您就可以随时跟踪上次输入的位置。

这肯定越来越接近我所需要的位置,但仍然无法正常工作。我所做的是当一个项目被拖入父元素时显示一个元素,当被拖出的项目离开父元素时隐藏该元素。子元素仍然触发事件,因此很难检查元素是否应该真正隐藏。我遇到的问题是当抓取的项目离开父元素时。我不知道如何让我的代码区分离开实际的父元素还是进入子元素(注册为离开父元素)。