追加浏览文件输入不显示预览图像
append browse file input does not show preview image
我正在使用javascript。我已经附加了类似的html
<input type="file" class="browse-02 validate[required]" onchange="showMyImage1(this,'thumbnil4')" name="data[question1][question_image4]" id="" />
<img id="thumbnil4" src="images/no_status_image_sp.jpg" class="uploadimg" alt="">
当点击添加更多按钮时,这个html会动态出现。
我写了如下所示的js:
function showMyImage1(fileInput,id) {
//console.log(fileInput);
var files = fileInput.files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
var imageType = /image.*/;
if (!file.type.match(imageType)) {
continue;
}
//alert(id);
var img = document.getElementById(id);//$("#"+id)[0];
//alert(img);
console.log(img);
img.file = file;
var reader = new FileReader();
reader.onload = (function(aImg) {
//alert(aImg);
return function(e) {
aImg.src = e.target.result;
};
})(img);
reader.readAsDataURL(file);
}
}
这里,这个js不适用于附加的数据。它在img.file = file;
行给出一个错误作为img is null
。
那么我应该写什么javascript呢?
更新
我对您的代码做了一点修改,问题是它为什么不起作用,因为元素是在DOM中动态创建的。所以正常的事件监听器不会触发。
若要从动态创建的元素中侦听事件,请在API上使用Jquery。
$(document).on('change','.browse-btn', function(){
var thumbnailId = $(this).prev().attr('id');
showMyImage1(this, thumbnailId)
});
$(document).ready(function() {
var n = 5;
var i = 2;
var j = 10;
var k = 2;
$('.addmore').click(function(e){
e.preventDefault();
var div = $('#appendData');
var html = '';
html += '';
html += '<div class="formPartd">';
html += '<div class="formPartd_left">';
html += '<div class="upload-img">';
html += '<label>Upload Image'+n+'</label>';
html += '<span>';
html += '<img id="thumbnil'+j+'" src="" class="uploadimg" alt="">';
html += '<input type="file" class="browse-btn" name="data[question1][question_image'+n+']" />';
html += '</span>';
html += '<div class="clear10"></div>';
html += '</div>';
html += '<div class="fildtpart3 pos">';
html += '<label>Answer'+n+'</label>';
html += '<span><input type="text" class="validate[required]" id="" value=""></span>';
html += '<div class="clear10"></div>';
html += '</div>';
html += '</div>';
div.append(html);
i++;j++;n++;
// $(document).trigger('updated');
});
$(document).on('change','.browse-btn', function(){
var thumbnailId = $(this).prev().attr('id');
showMyImage1(this, thumbnailId)
})
});
function showMyImage1(fileInput,id) {
//console.log(fileInput);
var files = fileInput.files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
var imageType = /image.*/;
if (!file.type.match(imageType)) {
continue;
}
//alert(id);
var img = document.getElementById(id);//$("#"+id)[0];
//alert(img);
//console.log(img);
img.file = file;
var reader = new FileReader();
reader.onload = (function(aImg) {
//alert(aImg);
return function(e) {
aImg.src = e.target.result;
};
})(img);
reader.readAsDataURL(file);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="appendData"></div>
<div class="fildtpart2" style="float:right">
<a href="" type="button " class="csv_button addmore " style="float:right;background:#5a9325">Add More</a>
</div>
当用户选择一个文件时,会调用onchange事件,但此时文件本身将无法访问。要显示它,你需要用户发布它,通常通过<form>
,然后保存它。从那里,你将能够显示它。
在许多现代网站上,由于使用了AJAX调用,这个过程看起来是透明的:
onchange事件调用一个jQuery函数,该函数实际上将表单(和图像)发送到php文件。该文件保存图像,然后返回相应的<img>
标记,其中填充了正确的属性src,该标记将通过Ajax回调附加在页面上。
相关文章:
- 非常大的图像显示渐进
- CSS Html使图像显示在单选按钮的选项上(单选按钮被CSS隐藏)
- JS照片库.使大图像显示和缩略图可单击
- 多个图像显示带有动态创建的画布的最后一个图像并分配给图像
- 当我在jquery/javascript中单击按钮时加载图像显示
- React图像显示
- 随机图像显示,无重复,使用Javascript
- 将跨度内容(图像url)转换为图像(显示)
- 随机图像显示不止一次
- 节点.js 使用 Multer 上传图像显示未定义
- 范围滑块,用于更改轨道上方对齐圆的直径并使对齐的图像显示在下方
- 使用图像显示和隐藏
- 使用 JavaScript 将文件夹中的图库图像显示到网页中
- 画布到图像显示为无图像(空白)
- 传单不会将本地图像显示为叠加
- 切换此元素时,如何使不同的图像显示,而不是文本
- 在页面加载时将图像显示为弹出窗口
- 如何在模糊浏览器主窗口时将图像显示为叠加层
- iOS在画布上绘制图像显示:无会导致内存泄漏
- JavaScript 图像显示不起作用