drop event或event.dataTransfer.files似乎会导致执行顺序混乱

时间:2013-01-07 01:33:33

标签: jquery html5 drag-and-drop event-bubbling


我无法理解我的脚本执行的顺序

我的jQuery拖放插件中有以下代码

    //...
    drop : function( event ) {
        event.stopPropagation();
        event.cancelBubble = true;
        event.preventDefault();

        $(this).removeClass("dropboxHover");

        methods.processFiles(event.dataTransfer.files);
    },
    //...

我不明白的是,为什么我的脚本首先处理文件列表(需要花费相当长的时间),然后在完成其他所有操作后删除该类。
不应该是相反的方式吗?
因此,在放开鼠标后需要几秒钟才能看到视觉效果。这表明浏览器冻结了什么。

帮助或代码很受欢迎!

1 个答案:

答案 0 :(得分:2)

尝试将processFiles包装在setTimeout 0中:

//...
drop : function( event ) {
    event.stopPropagation();
    event.cancelBubble = true;
    event.preventDefault();

    $(this).removeClass("dropboxHover");

    setTimeout(function(){methods.processFiles(event.dataTransfer.files);}, 0);
},
//...