Javascript Drag& Drop:ondragleave工作解决方案?

时间:2011-07-06 16:50:49

标签: javascript html5

ondragleave有没有可行的解决方案?

.addEventListener('ondragleave',function(){
console.log('nothing');
});

这不起作用。我做错了什么?

谢谢;)

2 个答案:

答案 0 :(得分:1)

尝试

.addEventListener ("dragend",function(){
    console.log('nothing');
});

编辑:这取决于您使用的浏览器。信息来自http://help.dottoro.com/ljsluknm.php。不同的浏览器使用不同的事件名称。

var source = document.getElementById ("source");
var target = document.getElementById ("target");
            if (source.addEventListener) {  // all browsers except IE before version 9
                    // Firefox from version 3.5, Google Chrome, Safari, Internet Exlorer
                source.addEventListener ("dragstart", DumpInfo, false);
                    // Firefox before version 3.5
                source.addEventListener ("draggesture", DumpInfo, false);
                    // Firefox, Google Chrome, Safari, Internet Exlorer
                source.addEventListener ("drag", DumpInfo, false);
                    // Firefox, Google Chrome, Safari, Internet Exlorer
                source.addEventListener ("dragend", DumpInfo, false);

                    // Firefox, Google Chrome, Safari, Internet Exlorer
                target.addEventListener ("dragenter", DumpInfo, false);
                    // Firefox, Google Chrome, Safari, Internet Exlorer
                target.addEventListener ("dragover", DumpInfo, false);
                    // Firefox from version 3.5, Google Chrome, Safari, Internet Exlorer
                target.addEventListener ("dragleave", DumpInfo, false);
                    // Firefox
                target.addEventListener ("dragexit", DumpInfo, false);
                    // Firefox from version 3.5, Google Chrome, Safari, Internet Exlorer
                target.addEventListener ("drop", DumpInfo, false);
                    // Firefox before version 3.5
                target.addEventListener ("dragdrop", DumpInfo, false);
            }
            else {
                if (source.attachEvent) {   // IE before version 9
                    source.attachEvent ("ondragstart", DumpInfo);
                    source.attachEvent ("ondrag", DumpInfo);
                    source.attachEvent ("ondragend", DumpInfo);

                    target.attachEvent ("ondragenter", DumpInfo);
                    target.attachEvent ("ondragover", DumpInfo);
                    target.attachEvent ("ondragleave", DumpInfo);
                    target.attachEvent ("ondrop", DumpInfo);
                }
            }

答案 1 :(得分:1)

前一个答案不正确,ondragleave和ondragend是两个不同的事件,它们在不同的元素上被触发。 什么brenjt可能意味着尝试ondragexit事件,这是在Mozilla中调用ondragleave< 3.5。

当从可以接收放置事件的元素中拖出时,会触发

ondragleave。

ondragend在ondragstart触发的元素上被触发。

例如参见:https://developer.mozilla.org/en-US/docs/DragDrop/Drag_Operations

你的ondragleave没有被解雇的原因可能是

.addEventListener('ondragleave',function(){

应该是

.addEventListener('dragleave',function(){

在我读过的文档中,例如在http://www.quirksmode.org/js/events_advanced.html使用.addEventListener()时,指定的事件没有“on”。

PS。 作为旁注,Mozilla 22似乎也会在一些超时悬停在可放置元素之后触发ondragleave事件。 DS。