jQuery多文件选择器作为"一个接一个地工作"

时间:2017-01-21 11:49:54

标签: javascript jquery

我正在寻找一个相当简单的解决方案,允许用户在input type="file"中一个接一个地选择文件,因为UX分析显示只有少数人知道如何使用它来按住shift键或ctrl一次选择多个文件。

目前,如果用户选择一个文件,而不是再次单击“选择”并选择另一个文件,则会覆盖以前的值。

HTML

<div class="fileform-multiple">
    <input multiple="multiple" data-multiple-caption="{count} files selected" class="inputfile" name="photos[image][]" type="file" id="listing_photos_attributes_1_image">
    <label for="file" class="form-control">Choose a file</label>
    <div class="selectbutton">Choose photo</div>
    <small>Maximum 5 files, each less than 2Mb</small>
</div>

JS

var inputs = document.querySelectorAll( '.inputfile' );
Array.prototype.forEach.call( inputs, function( input ){
    var label    = input.nextElementSibling,
        labelVal = label.innerHTML;

    input.addEventListener( 'change', function( e ){
        var fileName = '';
        var errors = 0
        $.each(e.target.files, function( index, value ) {
            var ext = value.name.split( '.' ).pop().toLowerCase();
            if ($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
                alert('invalid extension! Only .png, .jpg and .jpeg allowed ');
                errors ++
            };
        });
        if (errors > 0){

        } else if (this.files && this.files.length > 5 ) {
        alert('Please select less than 5 files');
        } else if( this.files && this.files.length > 1 ) {
            fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
        } else{
            fileName = e.target.value.split( '\\' ).pop();
        }

        if (errors > 0){

        } else if( fileName ){
            label.innerHTML = fileName;
        } else {
            label.innerHTML = labelVal;
        }

        var strToPrepend = fileName + ' ,' + "<br/>"
        $(this).closest('.fileform-multiple').find('small').prepend(strToPrepend);
    });
});

1 个答案:

答案 0 :(得分:-1)

您是否可以使用一些开源解决方案来拖动/上传多个文件?那里肯定有很多。例如,我首先在谷歌发现:http://www.dropzonejs.com/