0

您好我有多个文件要上传,我需要在提交表单之前验证所有这些文件

<form onsubmit="return validate()">
<input type="file" name="File" class="multi" />
<input type="file" name="File" class="multi" />
<input type="file" name="File" class="multi" />
<input type="file" name="File" class="multi" />
<input type="submit" name="BtnSubmit" value="save" />
</form>

和 j 查询部分

function validate()
{
$(".multi").each(function(){
   var files = $(this).val(); 

   if(files=='')
   { 
      alert("No document file selected");
       return false; 
   }

});
}

问题是它显示警报但仍然提交表单。如何防止这种情况。?

4

3 回答 3

0

false从表单的 onsubmit 处理程序返回会停止提交过程,但在您的代码中,您是false从您提供给的匿名函数$.each而不是validate函数返回的。

于 2013-02-12T07:25:51.347 回答
0

试试这个小提琴http://jsfiddle.net/6cU74/3/

HTML:-

<form id="form1" method="post">
    <input type="file" name="File" class="multi" />
    <input type="file" name="File" class="multi" />
    <input type="file" name="File" class="multi" />
    <input type="file" name="File" class="multi" />
    <input type="submit" id="BtnSubmit" value="save" />
</form>

JS(使用 jQuery):-

$(function () {
    $("#BtnSubmit").click(function (event) {
        event.preventDefault();
        var flag = true;
        $(".multi").each(function () {
            var files = $(this).val();

            if (files == '') {
                alert("No document file selected");
                flag=false;
            }

        });
        if (true==flag){
            $("#form1").submit();
            }
    });
});
于 2013-02-12T07:30:29.077 回答
0

validate 函数不会返回 false,但 .each() 函数会。所以添加验证以检查是否所有验证都通过了 .each() 函数,否则返回 false

function validate() {
    var count = $(".multi").length;
    var index = 0;
    $(".multi").each(function () {
        var files = $(this).val();

        if (files == '') {
            alert("No document file selected");
            return false;
        }

        index += 1;
    });

    if (index != count) { //If the validation in .each() looping has returned false
        return false;
    }
}
于 2013-02-12T07:35:55.170 回答