这是我的代码的一部分。 如果我尝试在块上删除图像,则preventDefault不起作用。
jQuery(document).ready(function($) {
$.event.props.push('dataTransfer');
$('#imgDropzone').on({
dragenter: function(e) {
$(this).css('background-color', '#ffd1ff');
},
dragleave: function(e) {
$(this).css('background-color', '');
},
drop: function(e) {
e.stopPropagation();
e.preventDefault();
var file = e.dataTransfer.files[0];
var fileReader = new FileReader();
var el = $(this);
fileReader.onload = (function(file) {
return function(event) {
alert(event.target.result);
};
})(file);
fileReader.readAsDataURL(file);
}
});
});
答案 0 :(得分:14)
您需要 * 来防止所有其他拖动事件的默认值:
请参阅http://jsfiddle.net/LrmDw/2/
$('#imgDropzone').on("dragenter dragstart dragend dragleave dragover drag drop", function (e) {
e.preventDefault();
});
解释原始jsfiddle中无效的内容:
当您在droparea(或页面中的任何位置)删除文件时,浏览器的默认行为是导航并尝试解释该文件。如果你放弃正常 例如,txt文件,浏览器将离开jsfiddle并显示txt文件的内容。这是在Chrome中。
顺便说一句,base64网址不是优选的,因为它们会复制数据。只需抓取指向该文件的blob指针并使用:
var file = e.dataTransfer.files[0];
var src = (window.URL || window.webkitURL).createObjectURL(file);
$("<img>", {src: src}).appendTo("body");
见
我不确切知道哪些,但我从来不必关心