使用<input type="file" multiple>
时,用户可以选择多个文件。
如何设置可以选择的文件数量限制,例如两个?
答案 0 :(得分:49)
您可以运行一些jQuery客户端验证来检查:
$(function(){
$("input[type='submit']").click(function(){
var $fileUpload = $("input[type='file']");
if (parseInt($fileUpload.get(0).files.length)>2){
alert("You can only upload a maximum of 2 files");
}
});
});
http://jsfiddle.net/Curt/u4NuH/
但请记住检查服务器端,因为可以很容易地绕过客户端验证。
答案 1 :(得分:7)
更改输入轨道时选择了多少个文件:
$("#image").on("change", function() {
if ($("#image")[0].files.length > 2) {
alert("You can select only 2 images");
} else {
$("#imageUploadForm").submit();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<strong>On change of the input track how many files are selected:</strong>
<input name="image[]" id="image" type="file" multiple="multiple" accept="image/jpg, image/jpeg" >
答案 2 :(得分:3)
如果文件数大于max_file_number,这应该可以防止表单被提交。
$(function() {
var // Define maximum number of files.
max_file_number = 3,
// Define your form id or class or just tag.
$form = $('form'),
// Define your upload field class or id or tag.
$file_upload = $('#image_upload', $form),
// Define your submit class or id or tag.
$button = $('.submit', $form);
// Disable submit button on page ready.
$button.prop('disabled', 'disabled');
$file_upload.on('change', function () {
var number_of_images = $(this)[0].files.length;
if (number_of_images > max_file_number) {
alert(`You can upload maximum ${max_file_number} files.`);
$(this).val('');
$button.prop('disabled', 'disabled');
} else {
$button.prop('disabled', false);
}
});
});
答案 3 :(得分:2)
您还应该考虑使用库来实现这一点:它们允许限制等等:
FineUploader。 Demo自5.16.2起使用validation.itemLimit
:
var restrictedUploader = new qq.FineUploader({
validation: {
itemLimit: 3,
}
});
bluimp's jQuery File Upload Plugin。用法:使用maxNumberOfFiles
自v9.22.0起的jquery file upload restricting number of files:
$('#fileuploadbasic').fileupload({
maxNumberOfFiles: 6
});
它们也可在https://cdnjs.com/
获取答案 4 :(得分:1)
使用JS的另一种可能的解决方案
function onSelect(e) {
if (e.files.length > 5) {
alert("Only 5 files accepted.");
e.preventDefault();
}
}
答案 5 :(得分:-1)
如果您想要php,则可以对数组进行计数,并仅执行if语句 喜欢
if((int)count($_FILES['i_dont_know_whats_coming_next'] > 2)
echo "error message";
答案 6 :(得分:-1)
在javascript中你可以做这样的事情
<input
ref="fileInput"
multiple
type="file"
style="display: none"
@change="trySubmitFile"
>
函数可以是这样的。
trySubmitFile(e) {
if (this.disabled) return;
const files = e.target.files || e.dataTransfer.files;
if (files.length > 5) {
alert('You are only allowed to upload a maximum of 2 files at a time');
}
if (!files.length) return;
for (let i = 0; i < Math.min(files.length, 2); i++) {
this.fileCallback(files[i]);
}
}
我也在寻找一种解决方案,在选择文件时可以限制这种情况,但直到现在我找不到类似的东西。
答案 7 :(得分:-3)
使用两个<input type=file>
元素,而不使用multiple
属性。