【问题标题】:Bootstrap File Upload clone引导文件上传克隆
【发布时间】:2017-01-03 17:12:19
【问题描述】:

我正在使用 Krajee 的 Bootstrap 文件上传插件进行文件输入,我正在尝试克隆文件输入,以便用户可以添加来自不同文件夹的多个文件,而不是一次选择它。我面临的问题是文件输入被克隆后,它的行为很奇怪。我为此设置了一个小提琴。 当我尝试重置或清除文件输入时,它总是清除第一个输入。一直在尝试很多选择,在花了这么多小时后决定在这里发帖。 JS 小提琴: https://jsfiddle.net/asfg9mna/

关于如何使其正常工作的任何想法?问题是每当我点击删除图标时,它总是删除第一个输入的文件而不是当前的。

HTML 代码:

<form role="form" id="upload-form" class="form-horizontal">
    <div class="addFiles text-nowrap">
        <div class="appendClass form-group" style="margin-bottom: 1.5%;">
            <label class="col-md-2 control-label" for="input-2">Select Files</label>
            <div class="col-md-9 col-9-input uploadFile">
                <input placeholder="Select Files" id="input-2" name="input2[]" type="file" class="file input-upload" data-show-upload="false" data-show-preview="false">
            </div>
            <button type="button" class="btn btn-box-tool addFilesBtn" data-toggle="tooltip" title="Click to add more files">
                <i class="fa fa-plus"> </i>
            </button>
            <button type="button" class="btn btn-box-tool closeFilesBtn" data-toggle="tooltip" title="Click to remove this block">
                <i class="fa fa-times"> </i>
            </button>
        </div>
    </div>
</form>

JS 代码:

//Clone Upload File Div
$(document).on('click', ".addFilesBtn", function(e) {
    e.preventDefault();
    $(this).tooltip('hide');
    $(".appendClass:first").clone(true).appendTo(".addFiles");
    $('.closeFilesBtn').show();
    $('.closeFilesBtn:first').hide();
    //$fileInput = $('.input-upload');
    //$fileInput.replaceWith( $fileInput = $fileInput.clone( true ) );
    //$('.input-upload').fileinput('clear').fileinput();
    $('.uploadFile').next().trigger('reset');
});

【问题讨论】:

    标签: javascript jquery html twitter-bootstrap-3 bootstrap-file-upload


    【解决方案1】:

    这里是jsfiddle

    像这样更新你的 js 代码,

    $(document).on('click', ".addFilesBtn", function(e) {
      e.preventDefault();
      $(this).tooltip('hide');
      parent_element = $(".appendClass:first");
      $(".input-upload").fileinput('destroy');
      element = parent_element.clone();
      element.appendTo(".addFiles");
      $(".input-upload").fileinput();
    
      $('.closeFilesBtn').show();
      $('.closeFilesBtn:first').hide();
      //$fileInput = $('.input-upload');
      //$fileInput.replaceWith( $fileInput = $fileInput.clone( true ) );
      //$('.input-upload').fileinput('clear').fileinput();
      //$('.uploadFile').next().trigger('reset');
    });
    

    请编写您的代码来更新将被克隆的每个元素的 id。

    编辑

    $(document).on('click', ".addFilesBtn", function(e) {
      e.preventDefault();
      $(this).tooltip('hide');
      $(".has_clone").each(function() {
        $this = $(this);
        var parent_element = $(this).closest(".appendClass");
        var $element = parent_element.clone();
        $element.find(".file-input").remove();
        var counter = parseInt($("#counter").val()) + 1;
        $element.find(".col-md-9").append('<input placeholder="Select Files" id="input-' + counter + '" name="input2[]" type="file" class="file dynamic_clone input-upload " data-show-upload="false" data-show-preview="false">');
        $("#counter").val(counter);
        $element.appendTo(".addFiles");
        $(".input-upload").fileinput({
          'showPreview': true
        });
      });
    $('.closeFilesBtn').show();
      $('.closeFilesBtn:first').hide();
    });
    
    //Close addFile div - Upload files
    $(document).on('click', ".closeFilesBtn", function(e) {
      e.preventDefault();
      $(this).closest(".appendClass").hide();
    });
    

    谢谢

    【讨论】:

    • @V for Vendetta 感谢您发布答案!我看到了小提琴;实际上,在单击添加按钮时,先前输入的值也被删除,因为您调用了 destroy() 方法。知道如何在除第一个之外的下一个 .input-upload 类上调用 destroy() 方法。例如类似$('.input-upload:next').destroy() ???
    • @V for Vendetta Perfect.. 完全按照我想要的方式工作。一直在花费数小时寻找解决此问题的方法。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 2016-12-17
    • 1970-01-01
    • 2019-01-12
    • 2014-10-14
    • 2020-05-09
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多