javascript - js addeventlistener 使用 capture for Dragenter 不适用于输入元素

标签 javascript html

我在保存输入项的容器 div 上有一个 dragenter 的事件监听器。但它仅适用于父 div,如果将鼠标悬停在输入上,则会触发 dragleave 事件。捕获不应该意味着输入正在触发父事件吗?

事件监听器添加在下面。

addDragStartListen: function(){
        var fields = document.querySelectorAll('.formFieldType');
        [].forEach.call(fields, function(field) {
            field.addEventListener('dragstart', FORMBUILD.DragStart, true);
        });

        var DItems = document.querySelectorAll('.f-row');
        [].forEach.call(DItems, function(DItem) {
            DItem.addEventListener('dragenter', FORMBUILD.DragEnter, false);
            DItem.addEventListener('dragover', FORMBUILD.DragOver, true);
            DItem.addEventListener('dragleave', FORMBUILD.DragLeave, false);
            DItem.addEventListener('drop', FORMBUILD.DragDrop, false);
        });



    },

请参阅此处的代码笔,该代码笔显示了当您将元素拖动到输入上时会触发 dragleave 的问题。 http://codepen.io/ambrosedheffernan/pen/PPqdMd

注意:codepen 中的代码已删除 Dragenter 上的监听器并添加了 Dragleave 上的监听器。

我正在 Chrome 中进行测试,它应该支持捕获,但为什么我不能对输入执行此操作?默认情况下是否有其他事件优先?

最佳答案

捕获意味着事件将从父级到子级触发。 在您的情况下,我认为当您将项目拖动到容器,然后拖动到其子输入时, dragenterdragleave 会触发容器,而 dragenter 会触发输入。

作为一个想法,您可以创建一个变量来保存实际的拖动进入/离开状态,即当 dragenterdragleave 发生相同次数时,然后考虑拖动元素要离开容器。

关于javascript - js addeventlistener 使用 capture for Dragenter 不适用于输入元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469592/

相关文章:

javascript - 如何在同一元素上使用 .hover 和 .click

javascript - 使用 dojo 操作 Select

javascript - 谷歌地图 - 获取拖动标记的坐标

javascript - XMLHttpRequest 服务器没有应答

JavaScript 试图改变图像

javascript - 单击后禁用链接 --no jquery

html - BEM 方法论 : Component thinking and spacing

javascript - jquery this.attr ("action") 提交表单?

javascript - 使用 JavaScript 数学。作为 HTML Canvas .fillRect 坐标的方法

javascript - 未定义的输入、动态页面更改、html 中的 javascript