javascript - jQuery 文件上传预览/删除图像无法正常工作

标签 javascript jquery html

您可以在 Jsfiddle 找到工作文件

/* JavaScript */

function readURL() {
	var $input = $(this);
    if (this.files && this.files[0]) {
        var reader = new FileReader();
        reader.onload = function(e) { 
            $input.next('.blah').attr('src', e.target.result).show();
            $input.after('<input type="button" class="delbtn" value="remove">');
        }
        reader.readAsDataURL(this.files[0]);
    }
    }

    $(".imgInp").change(readURL); 

    $("form").on('click', '.delbtn', function(e) { 
		var $input = $(this); 
        $input.next('.blah').attr('src', e.target.result).hide();   
        $input.prev('.imgInp').val(""); 
        $(this).closest(".delbtn").remove();    
});
<form name="" action="" method="post">
  <div class="div">
    <input type='file' class="imgInp blah" />
    <img class="blah" src="#" alt="your image"/></div>
  <br>
  <br>
  <div class="div">
    <input type='file' class="imgInp" />
    <img class="blah" src="#" alt="your image"/></div>
</form>

显示和删除图像工作正常。

但是,如果图像已经选择并再次选择另一个新图像,则预览功能将不起作用。还删除按钮继续添加。请检查下面的错误图像。

Click to view the error

最佳答案

我已经在以下链接更新了您的fiddle

https://jsfiddle.net/balasuar/97dzkf70/20/

第一次选择图像时,按钮的下一个元素是图像。但是,一旦选择了图像,您就在文件控件旁边添加了Remove 按钮元素。因此,下一次,它会中断,因为图像不再位于文件控件旁边。

我通过使用 reset 方法来清除它,从而修复了它。

function readURL() {
    var $input = $(this);
    if (this.files && this.files[0]) {
        var reader = new FileReader();
        reader.onload = function(e) { 
            reset($input.next('.delbtn'), true);
            $input.next('.blah').attr('src', e.target.result).show();
            $input.after('<input type="button" class="delbtn" value="remove">');
        }
        reader.readAsDataURL(this.files[0]);
    }
}

$(".imgInp").change(readURL); 

$("form").on('click', '.delbtn', function(e) { 
        reset($(this));   
});

function reset(elm, prserveFileName){
  if(elm && elm.length > 0) {
    var $input = elm; 
        $input.next('.blah').attr('src', '').hide(); 
        if(!prserveFileName){
          $input.prev('.imgInp').val(""); 
        }
        elm.remove(); 
  }
}

关于javascript - jQuery 文件上传预览/删除图像无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40573212/

相关文章:

javascript - jquery 中的 .find().html() 在 iframe 中使用时始终返回 null

javascript - jQuery 函数不适用于附加的 html 表单

javascript - jquery鼠标悬停颜色变化

javascript - 将 onclick 事件添加到 img id

html - 为什么导航栏内的容器宽度受限而不是填满整个宽度?

javascript - 使用 javascript,是否可以通过 Google Translate 提取并列出所有可用语言?

javascript - Android:如何通过javascript启动android的功能

javascript - ng-required 不在指令中工作

jquery 验证特定位置的错误位置

javascript - HTML5 游戏的对象存储 - 使用什么?