How to display file name for custom styled input file using jquery?

前端 未结 7 1303
我寻月下人不归
我寻月下人不归 2020-12-02 15:49

I have styled a file input using CSS:

相关标签:
7条回答
  • 2020-12-02 16:08

    You can take the file name like this

    $('#file-upload')[0].files[0].name
    
    0 讨论(0)
  • 2020-12-02 16:09

    I've had a long crack i hope it helps you may need to style it more to your liking

    HTML

    <form>
      <label for="file-upload" class="custom-file-upload">
        <i class="fa fa-cloud-upload"></i> Upload Image
      </label>
      <input id="file-upload" name='upload_cont_img' type="file"     style="display:none;">
      <input id="uploadFile" placeholder="No File" disabled="disabled" />
    </form>
    

    CSS

    .custom-file-upload {
      border: 1px solid #ccc;
      display: inline-block;
      padding: 6px 12px;
      cursor: pointer;
    }
    
    #uploadFile {
      text-align: center;
      border: none;
      background-color: white;
      color: black;
    }
    

    JavaScript

    document.getElementById("file-upload").onchange = function() {
      document.getElementById("uploadFile").value = this.value;
    };
    

    JSFiddle link:https://jsfiddle.net/kd1brhny/

    0 讨论(0)
  • 2020-12-02 16:11

    Upload button Style

    input[type="file"] {
        display: none;
    }
    .custom-file-upload {
        border: 1px solid #ccc;
        display: inline-block;
        padding: 6px 12px;
        cursor: pointer;
    }
    <label for="file-upload" class="custom-file-upload">
        <i class="fa fa-cloud-upload"></i> Custom Upload
    </label>
    <input id="file-upload" type="file"/>

    0 讨论(0)
  • 2020-12-02 16:12

    You have to bind and trigger the change event on the [type=file] element and read the files name as:

    $('#file-upload').change(function() {
      var i = $(this).prev('label').clone();
      var file = $('#file-upload')[0].files[0].name;
      $(this).prev('label').text(file);
    });
    .custom-file-upload {
      border: 1px solid #ccc;
      display: inline-block;
      padding: 6px 12px;
      cursor: pointer;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form>
      <label for="file-upload" class="custom-file-upload">
        <i class="fa fa-cloud-upload"></i> Upload Image
      </label>
      <input id="file-upload" name='upload_cont_img' type="file" style="display:none;">
    </form>

    0 讨论(0)
  • 2020-12-02 16:24

    Since continues update of browser CSS fix is not effective for all browsers please use JavaScript version for above problem solution.

    Solution 1

    CSS snippets

    .wrap-file_upload{position:relative; display:inline-block;}
    .wrap-file_upload .btn_colorlayer,.wrap-file_upload:hover .btn_colorlayer{position: absolute; left: 102%; padding-left: 8px; max-width: 120px; white-space: nowrap;text-overflow: ellipsis; overflow: hidden; color:#d7263d;top: 50%; margin-top: -8px; text-transform: none; pointer-events:none; }
    .wrap-file_upload input[type="file"]{opacity: 0; height:40px; display: inline; position: absolute; left: 0; top: 0; width: 230px; bottom: 0;}
    .wrap-file_upload .btn_lbl{pointer-events: none;}
    

    JavaScript snippets

    function _updatename(obj){
        var _parentObj = $(obj).parents("[data-uploadfield]");
        _parentObj.addClass("wrap-file_upload");
        if(!_parentObj.find(".btn_colorlayer").length){
            _parentObj.append("<span class='btn_colorlayer'></span>")
        }
        var _tempname = "";
        if( $(obj).val() != "" && typeof( $(obj).val())!='undefined'){
            _tempname =  $(obj).val().split('\\');
            _tempname = _tempname[_tempname.length-1];
        }
    
        var _name = _tempname ||  $(obj).parents("[data-uploadfield]").attr("data-uploadfield") || "No file chosen";
        _parentObj.find(".btn_colorlayer").attr("title",_name).text(_name);
    }
    
    if($("[data-uploadfield]").length){
        $("[data-uploadfield]").each(function(i){
            _updatename($(this).find("input[type='file']"));
        });
    }
    
    $(document).on("click","[data-uploadfield] input[type='file']",function(){
        _updatename($(this));
    });
    
    $(document).on("change","[data-uploadfield] input[type='file']",function(){
        _updatename($(this));
    });
    
    //  Enable Custom Control for Ajax called pages
    $( document ).ajaxComplete(function(event,request,settings){
        if($("[data-uploadfield]").length){
            _updatename("[data-uploadfield] input[type='file']");
        }
    });
    

    Solution 2

    For CSS Only Solution

    .file_upload {
      position: relative;
      min-width: 90px;
      text-align: center;
      color: #ee3333;
      line-height: 25px;
      background: #fff;
      border: solid 2px #ee3333;
      font-weight: 600;
    }
    
    a.file_upload {
      display: inline-block;
    }
    
    .file_upload .btn_lbl {
      position: relative;
      z-index: 2;
      pointer-events: none;
    }
    
    .file_upload .btn_colorlayer {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background: #fff;
      z-index: 1;
      pointer-events: none;
    }
    
    .file_upload input[type="file"] {
      position: absolute;
      top: 3px;
      left: -86px;
      font-weight: 600;
      margin-left: 100%;
      color: #ee3333;
      outline: none;
    }
    <button class="file_upload" type="button">
          <span class="btn_lbl">Browse</span>
          <span class="btn_colorlayer"></span>
          <input type="file" name="fileupload" id="file_upload" />
        </button>

    0 讨论(0)
  • 2020-12-02 16:30

    You can use this for multiple file upload also

    updateList = function() {
      var input = document.getElementById('file');
      var output = document.getElementById('fileList');
    
      output.innerHTML = '<ul>';
      for (var i = 0; i < input.files.length; ++i) {
        output.innerHTML += '<li>' + input.files.item(i).name + '</li>';
      }
      output.innerHTML += '</ul>';
    }
    <input type="file" name="file" id="file" multiple 
           onchange="javascript:updateList()" />
    <br/>Selected files:
    <div id="fileList"></div>

    0 讨论(0)
提交回复
热议问题