我正在使用此代码使页面上的某些项目可拖动/可拖放。
在IE / FF / Chrome上都可以,但是在Safari上却遇到了一些麻烦。
在每个事件上放置一些console.log(),我发现除了最重要的“放置”事件外,所有事件都可以被野生动物园识别。

谁能找到使该代码在Safari上也能工作的解决方案?

prepareDrag:function () {
    if (Modernizr.draganddrop) {
        var dragged = $SHS.j('a');
        $SHS.j.each(dragged, function (index, value) {
            value.addEventListener('dragstart', function (e) {
                try {
                    var img = $SHS.j(this).find('img');
                    if ((img[0].nodeName).toUpperCase() == 'IMG') {
                        var commandData = img[0].src + '|' + value.href;
                        //Do Stuff
                    } else throw 'Non valido';
                } catch (err) {
                    //Errore
                }
            }, false);
            value.addEventListener('dragend', function (e) {
                //Do Stuff
            }, false);
        });
    }
},
prepareDrop:function () {
    if (Modernizr.draganddrop) {
        var dropper = document.getElementById('dropArea');
        dropper.addEventListener('dragenter', function (e) {
            $SHS.j("#dropArea").addClass('drop-over');
        }, false);

        dropper.addEventListener('drop', function (e) {
            e.stopPropagation();
            e.preventDefault();
            $SHS.j("#dropArea").removeClass('drop-over');
            //Do stuff
        }, false);

        dropper.addEventListener('dragover', function (e) {
            e.stopPropagation();
            if (e.preventDefault) {

                e.preventDefault();
            }
            $SHS.j("#dropArea").addClass('drop-over');
        }, false);

        dropper.addEventListener('dragleave', function (e) {
            $SHS.j("#dropArea").removeClass('drop-over');
        }, false);

    } else {

    }
},

最佳答案

您还必须在e.preventDefault();上调用dragenter

09-25 19:03