2010-09-17 62 views
1

我從jQuery開始,嘗試在表單驗證中保存大量代碼。我想把所有的表單字段放在一個數組中,使用each()來遍歷數組來查看這些字段是否爲空並返回錯誤(如果有必要)。通過數組驗證表單驗證字段

一個問題;我的方法是行不通的..

我用下面的方法


    var fields = [ "$('#name')", "$('address')" ]; 
    jQuery.each(fields,function(){ 
     if(this.val() == ""){ 
     alert(this.id+" is empty"); 
     return false; 
     } 
    }); 

我當然可以分別檢查各個領域,但因爲我有很多的形式,這將是一個相當大的代碼。

我的想法甚至可能,如果他們是,如何?

好了,上述問題是完全解決了,但是我現在有一個新的

一旦我檢查所有的,如果他們是空的,我要檢查,如果輸入一個有效的電子郵件領域。我使用下面的代碼:


    $("#reservationForm").live("submit", function(f){ 
    $(".formError").hide(); 
    if(!$('#agree').is(':checked')){ 
     $("#agree").after('You need to agree with the terms on the right'); 
     f.preventDefault(); 
    }else{ 
     $("#reservationForm").find("input[type=email], input[type=tel], input[type=text]").filter(function(){ 
     if($(this).val() == ""){ 
     $(this).css("border","solid 1px red").after('Please fill in your '+this.id+''); 
     $(this).find("first-child").focus(); 
     f.preventDefault(); 
     }else if(!/\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/.test($("#mail").val())){ 
     $("#mail").css("border","solid 1px red").after('Please enter a valid email address'); 
     } 
     }); 
    } 
    }); 

的問題是,邊框沒有變成紅色,並且不顯示應顯示電子郵件字段之後的消息。只有電子郵件字段是重點,沒有別的。

噢,我實際上還有另一個'問題',因爲第一個孩子選擇器似乎並不工作。代替第一個元素,最後一個元素被聚焦。 (我也試過最後一個孩子,但那並沒有訣竅。)

回答

1

怎麼樣,如果有表單中任何空元素髮現:

var emptyElements = $('#formId') 
    .find(':text, :radio, :checkbox, select') 
    .filter(function() { 
     var isEmpty = $(this).val() == ''; 
     if (isEmpty) { 
      alert(this.id + ' is empty'); 
     } 
     return isEmpty; 
    }); 
if (emptyElements.length > 0) { 
    return false; 
} 

jQuery validation plugin也值得一試。

+0

這很容易!謝謝! – Maurice 2010-09-17 10:48:26

3

刪除數組中的'''你想要存儲對元素的引用,而不是字符串;-)

此外,看一看:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

這是一個偉大的,但簡單易用的jQuery插件的形式哦,你可能想改變.VAL()來.attr(「值! 「)(雖然val可能是有效的,但我不確定)

哦,如果那仍然沒有「T工作嘗試$(本),而不是僅僅這一點,不是100%的方式jQuery的處理這超過$(本)

+0

@Maurice - 一定要接受你的問題的答案,如果他們解決您的問題:) jQuery的驗證插件這裏是一個很好的建議:) – 2010-09-17 10:30:28

+0

@Nick - 當然,我接受了答案,但看到我的回覆下面爲什麼我不想使用那個:-)感謝您的建議,但! – Maurice 2010-09-17 10:34:55

0
$.each($('form').serializeArray(), function(i, field) { 
    if (field.value.length == 0 || field.value.match('regex of invalid syntax')) { 
     // handle invalid data properly. 
    } 
})