Javascript Drop事件不阻止默认设置

Javascript Drop事件不阻止默认设置,javascript,jquery,google-chrome,drag-and-drop,jquery-events,Javascript,Jquery,Google Chrome,Drag And Drop,Jquery Events,我有以下建议: 我使用的是Chrome版本24.0.1312.52M和最后一个jQuery(1.8.3)。 当我将文件放入框中时,浏览器不会阻止默认beaviour。 你能帮帮我吗 p.S.dragexit已被弃用,对吗?这将为您解决问题 jQuery( function ( $ ) { var $box = $( "#box" ); $box.bind("dragenter", dragEnter); $box.bind("dragleave", dragLeave);

我有以下建议:

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


p.S.dragexit已被弃用,对吗?

这将为您解决问题

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

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

如果您希望在Google Chrome中触发drop事件,则必须在之前定义dragover侦听器,即使该函数根本不执行任何操作。我不知道为什么,这很奇怪。。。但识别清晰且易于复制:)
昨天在那个sh*t上损失了2个小时:/hope this help

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

HTML:


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

它适用于我,我没有修改任何一行代码。。在我更新Chrome之前,它一直在工作:|
版本24.0.1312.52 m
现在它只是在浏览器中打开文件,我没有疯。有什么办法吗?@user1824269我不确定。。还在玩弄它。它刚刚开始工作,准备粘贴我的Chrome浏览器版本。。但它说我需要重新启动浏览器来更新。。一旦我重新启动,它就不再工作了。您的解决方案在JSFIDLE上似乎不起作用。顺便说一句,要停止冒泡,需要使用e.stopPropagation(),而不是在JSFIDLE之外为我工作的e.preventDefault(),我认为这是因为Dragver事件。我应该添加停止传播方法吗?是的。你不必防止跌落。更新了我的答案。我只是在打字。我没有试过(我希望我能多次投票,谢谢!
jQuery( function ( $ ) {
    var $box = $( "#box" );
    $box.bind("dragenter", dragEnter);
    $box.bind("dragleave", dragLeave);
    $box.bind("drop", drop);

    $(document).bind('dragover', function (e) {
         e.preventDefault();
    });
});
<div id="image_holder" ondragover="dragEnter(this,event)"></div>
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');
}