删除事件不会阻止默认

时间:2013-01-14 20:00:52

标签: javascript jquery google-chrome javascript-events drag-and-drop

我有以下内容:http://jsfiddle.net/KywJT/

function dragEnter(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    $(evt.target).addClass('over');
}

function dragLeave(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    $(evt.target).removeClass('over');
}

function drop(evt) {
   evt.stopPropagation();
   evt.preventDefault();
   $(evt.target).removeClass('over');
}

jQuery( function ( $ ) {

  var $box = $( "#box" );
  $box.bind("dragenter", dragEnter);
  $box.bind("dragleave", dragLeave);
  $box.bind("drop", drop);
});

我使用的是Chrome版本24.0.1312.52 m和最后一个jQuery(1.8.3)。 当我将文件放入框中时,浏览器不会阻止默认beaviour。 你能帮我吗?

P.S。 dragexit被弃用了吗?

3 个答案:

答案 0 :(得分:12)

如果您希望在Google Chrome中触发放置事件,则必须先定义一个dragover侦听器,即使该函数根本不执行任何操作。我不知道为什么,这很奇怪......但是清楚地确定并且易于重现:) 昨天失去了2个小时:/希望这有帮助

答案 1 :(得分:6)

这应该为您解决问题。

jQuery( function ( $ ) {
    var $box = $( "#box" );
    $box.bind("dragenter", dragEnter);
    $box.bind("dragleave", dragLeave);
    $box.bind("drop", drop);

    $(document).bind('dragover', function (e) {
         e.preventDefault();
    });
});

答案 2 :(得分:0)

这是一个老问题,但我使用了这个问题的答案并编写了我想要的代码:

HTML:

<div id="image_holder" ondragover="dragEnter(this,event)"></div>

jQuery的:

function dragEnter(a,evt) {
    evt.stopPropagation();
    evt.preventDefault();
    $(evt.target).addClass('over');

    $(a).bind("dragleave", dragLeave);
    $(a).bind("drop", drop);

    $(document).bind('dragover', function (e) {
        e.stopPropagation();
        e.preventDefault();
    });
    return false;
}

function dragLeave(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    $(evt.target).removeClass('over');
    return false;
}

function drop(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    $(evt.target).removeClass('over');
}

这有权让您可以轻松地将其用于页面中的不同元素。