繁体   English   中英

HTML<input type='file'> 文件选择事件

[英]HTML <input type='file'> File Selection Event

假设我们有这个代码:

<form action='' method='POST' enctype='multipart/form-data'>
    <input type='file' name='userFile'><br>
    <input type='submit' name='upload_btn' value='upload'>
</form>

这导致:

显示浏览和上传按钮的图像

当用户单击“浏览...”按钮时,将打开一个文件搜索对话框:

显示选择了文件的文件搜索对话框的图像

用户将通过双击文件或单击“打开”按钮来选择文件。

在选择文件后,是否有一个 Javascript 事件可以用来通知我?

监听更改事件。

input.onchange = function(e) { 
  ..
};

当您必须重新加载文件时,您可以删除输入的值。 下次添加文件时,将触发 'on change' 事件。

document.getElementById('my_input').value = null;
// ^ that just erase the file path but do the trick

jQuery方式:

$('input[name=myInputName]').change(function(ev) {

    // your code
});

这就是我用纯 JS 做的方式:

 var files = document.getElementById('filePoster'); var submit = document.getElementById('submitFiles'); var warning = document.getElementById('warning'); files.addEventListener("change", function () { if (files.files.length > 10) { submit.disabled = true; warning.classList += "warn" return; } submit.disabled = false; });
 #warning { text-align: center; } #warning.warn { color: red; transform: scale(1.5); transition: 1s all; }
 <section id="shortcode-5" class="shortcode-5 pb-50"> <p id="warning">Please do not upload more than 10 images at once.</p> <form class="imagePoster" enctype="multipart/form-data" action="/gallery/imagePoster" method="post"> <div class="input-group"> <input id="filePoster" type="file" class="form-control" name="photo" required="required" multiple="multiple" /> <button id="submitFiles" class="btn btn-primary" type="submit" name="button">Submit</button> </div> </form> </section>

即使您单击取消,也会调用 Change 事件。

虽然这是一个老问题,但它仍然是一个有效的问题。

预期行为:

  • 上传后显示选定的文件名。
  • 如果用户单击Cancel则不要执行任何操作。
  • 即使用户选择了相同的文件,也显示文件名。

带有演示的代码:

 <!DOCTYPE html> <html> <head> <title>File upload event</title> </head> <body> <form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="userFile" id="userFile"><br> <input type="submit" name="upload_btn" value="upload"> </form> <script type="text/javascript"> document.getElementById("userFile").onchange = function(e) { alert(this.value); this.value = null; } </script> </body> </html>

解释:

  • onchange事件处理程序用于处理文件选择事件中的任何更改。
  • 只有当元素的值发生变化时才会触发onchange事件。 因此,当我们使用input字段选择相同的文件时,不会触发事件。 为了克服这个问题,我设置了this.value = null; onchange事件函数结束时。 它将所选文件的文件路径设置为null 因此,即使在同一文件选择时也会触发onchange事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM