我有3个文件输入用于上传文件,如下所示,
A File : <input type="file" name="AFile" id="AFile" />
B File: <input type="file" name="BFile" id="BFile" />
C File : <input type="file" name="CFile" id="CFile" />
我已经使用以下jQuery函数在选中时自动上传3个文件,
$("#AFile" && "#BFile" && "#CFile").change(function() {
document.getElementById("UploadFile").submit();
});
上述功能只有在按顺序选择AFile
,BFile
和CFile
时才能正常工作,如果从上述顺序中选择则失败。
也就是说,如果首先选择CFile
,然后AFile
,则UploadFile
即使在选择第三个文件(B文件)之前也会自动提交。除上述成功案例外,任何选择案都会发生同样的错误。
AFile BFile CFile - Form with three files submitted
AFile CFile - form gets submitted even before third selection could be made, the same happens for any case apart from the A, B, C selection case.
从逻辑上讲,
A B C AND
1 1 1 1
1 1 0 0
1 0 1 0
1 0 0 0
0 1 1 0
0 1 0 0
0 0 1 0
0 0 0 0
但这没有发生。
如何解决此错误?
PS:我觉得对servlet进行3次单独提交或使用or(||)描述多个选择案例并不是一个很好的方法,请在除了这两种方法之外还有其他任何答案时发布。
答案 0 :(得分:1)
为什么不将它们分开:
$("#AFile").change(function() {
document.getElementById("UploadFile").submit();
});
$("#BFile").change(function() {
document.getElementById("UploadFile").submit();
});
$("#CFile").change(function() {
document.getElementById("UploadFile").submit();
});
或者,您可以在提交之前检查是否已选择所有3个文件。
答案 1 :(得分:0)
$("input:file").change(function () {
var valid = true;
$("input:file").each(function () {
if ($(this).val() == "")
valid = false;
});
if (valid)
$("#UploadFile").submit();
});
答案 2 :(得分:0)
我做的快小提琴 - http://jsfiddle.net/wnq5h/
<强>的jQuery 强>
$('input[type="file"]').change(function() {
var valid = 1;
$('input[type="file"]').each(function() {
if ($(this).val() == '') {
valid = 0;
}
});
if (valid === 1) {
alert('submitting'); // $("#UploadFile").submit();
} else {
alert('not all files selected'); // return false;
}
});
答案 3 :(得分:0)
问题在于HTML
&amp;&amp;没有任何意义,,
代表OR,代表AND。
但是又像是,
$("#LeftFile #RightFile #ConfigFile")
意味着,A和B和C而不是我想要的A和(B和C),因为jQuery不支持运算符重载,因此不起作用,只考虑C。
所以,最后我用一个计数器来满足我的条件,我必须坚持单一提交
var files = $("#LeftFile, #RightFile, #ConfigFile").change(function() {
var count = files.filter(function(){
return this.value.length;
}).length;
if(count == files.length)
{
document.getElementById("UploadFile").submit();
}
});
现在无论选择顺序如何,这都有效。