【问题标题】:How to design a custom file upload button such that the label changes when file is uploaded如何设计自定义文件上传按钮,以便在上传文件时更改标签
【发布时间】:2021-05-13 07:20:24
【问题描述】:
<form method="post" enctype="multipart/form-data" action="">
  <span id="filename">Select your file</span>
    <label for="file-upload">Browse<input type="file" id="file-upload"></label>
</form>
<script>
$('#file-upload').change(function() 
    var filepath = this.value;
    var m = filepath.match(/([^\/\\]+)$/);
    var filename = m[1];
    $('#filename').text(filename);
});
</script>

我只是想帮助实现提交按钮,这样每个人都不会使用我们在这里使用的单独的文件名 ID。我是 js 新手,我的项目中有很多文件上传按钮,当我使用类时,每个文件名的更改都只反映在一个按钮上。

【问题讨论】:

  • 为此目的使用ID 属性不是这样做的方法。您提到使用classes - 这更好,但您需要将该方法与父/子/兄弟选择器结合起来以定位和修改正确的 HTML 元素

标签: javascript html jquery


【解决方案1】:

使用 vanilla Javascript 非常快速地拼凑在一起〜基本上如果有多个文件输入元素并且您希望每个元素具有相同的功能,那么您将希望获得对节点列表集合的引用(querySelectorAll 将返回一个节点列表)并且,为每一个分配一个change 事件处理程序。 使用parentNodepreviousElementSibling 的组合,您可以识别span 元素并轻松修改它。

文件的实际上传可以由 change 处理程序处理,并因此对 DOM 进行修改。

    document.querySelectorAll('input[type="file"]').forEach( input=>{
        input.addEventListener('change',function(e){
            this.parentNode.previousElementSibling.textContent=this.value.match(/([^\/\\]+)$/)[1];
            this.parentNode.textContent='Uploading...';
        });
    });
<form method='post' enctype='multipart/form-data'>
    <span>Select your file</span>
    <label for='file-upload'>Browse<input type='file' /></label>
</form>

<form method='post' enctype='multipart/form-data'>
    <span>Select your file</span>
    <label for='file-upload'>Browse<input type='file' /></label>
</form>

【讨论】:

  • 非常感谢!!!!最后,它奏效了,我搞砸了。我想投票,但也没有声誉:-(
  • 你可能会“接受”这个答案 - 很惊讶你不能“投票”虽然......无论如何 - 希望它有所帮助
猜你喜欢
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2011-05-15
相关资源
最近更新 更多