添加文件类型的动态输入字段,并预览

时间:2016-12-01 09:12:16

标签: javascript jquery html

我制作了动态input of type file来添加或删除大量图片。

enter image description here

当用户点击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

1 个答案:

答案 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>

表单现在不发布。