我制作了动态input of type file
来添加或删除大量图片。
当用户点击add fields
时,它会添加类型字段的新输入。单击按钮时附加输入字段的代码:
var i = 0;
$("#add_more_img").click(function(e){
i++;
$("#dynamic_table_field").append('<tr id=row'+i+'><td><button name="remove" id="'+i+'" class="btn btn-danger btn-remove">X</button></td><td><input type="file" name="event_images[]" id="event_images'+i+'" data-panelid="event_images'+i+'" class="form-control images_list" accept="image/gif, image/png, image/jpeg, image/pjpeg" /></td><td id="img_preview_td"><img name="img_preview'+i+'" id="img_preview" /></td></tr>');
alert("Hiiiiii");
e.preventDefault();
});
当用户选择图像时,我希望它显示在上图中的红色边框内。我已经有了代码,但它只适用于单个输入字段。所以我尝试对该代码进行一些更改,但仍然无法正常工作。这是代码:
$(".images_list").change(function() {
var input = $(this);
var name = $(this).attr("name");
var id = $(this).attr("id");
alert(input);
var val = $(this).val();
switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
case 'gif': case 'jpg': case 'png': case 'jpeg':
alert("an image");
alert(name);
readURL(this);
break;
default:
$(this).val('');
// error message here
alert("not an image");
break;
}
});
function readURL(input) {
var this_id = input.attr("id");
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
this_id.attr('src', e.target.result);
this_id.css({
width:"120px",
height:"120px"
});
}
reader.readAsDataURL(input.files[0]);
}
}
我无法显示我选择的图像。
其他问题,当我提交表单时,它确实删除了我添加它们的所有输入字段。我怎么能阻止这个?
非常感谢你的帮助。
编辑:我添加了此JSFiddle。
答案 0 :(得分:1)
这是一份工作样本。我试过我的机器并立即工作。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Title Goes Here</title>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<style>
#div_create_event {
margin: 17px 0;
}
#img_preview_td {
outline: 1px solid red;
width: 70px;
}
img {
height: 200px;
width: 200px;
}
</style>
<script>
$(document).ready(function(){
var i = 0;
$("#add_more_img").click(function(e){
i++;
$("#dynamic_table_field").append('<tr id=row'+i+'><td><button name="remove" id="'+i
+'" class="btn btn-danger btn-remove">X</button></td><td><input type="file" onchange="myfn(this)" name="event_images[]" id="event_images'+i
+'" data-panelid="event_images'+i+'" class="form-control images_list" accept="image/gif, image/png, image/jpeg, image/pjpeg" />'
+'</td><td id="img_preview_td"><img id="img_preview'+i+'" /></td></tr>');
e.preventDefault();
});
$(document).on("click",".btn-remove",function(){
var button_id = $(this).attr("id");
$("#row"+button_id+"").remove();
});
});
function myfn(myinput) {
var name = $(myinput).attr("name");
var id = $(myinput).attr("id");
var val = $(myinput).val();
debugger;
switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
case 'gif': case 'jpg': case 'png': case 'jpeg':
readURL(myinput);
break;
default:
$(this).val('');
break;
}
}
function readURL(myinput) {
debugger;
if (myinput.files && myinput.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#img_preview' + $(myinput).attr("id").replace('event_images','') ).attr('src', e.target.result);
}
reader.readAsDataURL(myinput.files[0]);
}
}
</script>
</head>
<body>
<form action="" name="add_event" id="add_event" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="event_title">Title</label>
<input type="text" class="form-control" name="event_title">
</div>
<table id="dynamic_table_field">
<tr>
<td><button name="add_more_img" id="add_more_img" class="btn btn-success">Add fields</button></td>
</tr>
</table>
<div class="form-group" id="div_create_event">
<input type="submit" class="btn btn-primary" id="create_event" name="create_event" value="Add Event">
</div>
</form>
</body>
</html>
表单现在不发布。