jQuery自动提交

时间:2014-04-28 08:29:10

标签: jquery

我有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();
}); 

上述功能只有在按顺序选择AFileBFileCFile时才能正常工作,如果从上述顺序中选择则失败。

也就是说,如果首先选择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(||)描述多个选择案例并不是一个很好的方法,请在除了这两种方法之外还有其他任何答案时发布。

4 个答案:

答案 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();
});

示例:http://jsfiddle.net/mu34j/1/

答案 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();     
    }

}); 

现在无论选择顺序如何,这都有效。