2010-10-29 30 views
0

我已經爲我的表單(調查)獲得了此驗證腳本。它遍歷所有答案,並檢查它是否爲單選按鈕,複選框,輸入或textarea問題。在此基礎上,它分別檢查輸入的檢查值(無線電和複選框)或「(」input/textarea)「之外的值(它並不是很多,但它是開始的)。如果字段爲空,requiredMessage()會設置警告,或者在字段被用戶更正時刪除警告。在此jQuery驗證中優化值檢查

我正在尋找一種方法來優化此代碼,因爲它看起來非常重複,但我不太確定如何開始。雖然這些街區有一些共同之處,但它們似乎並不適合一種通用檢查。歡迎任何幫助!

注意:我不期望一個完整的審查版本,我只需要在哪裏尋找改進的方向,或者如何使用jQuery將這些驗證檢查鏈接在一起。

這裏的JavaScript:

// validate the form 
function validate(event){ 
    var sendform = true; 
    $(".questionnaire-question-answer").each(function(){ 

// radiobutton case 
    if($(this).find("input:radio").length){ 
     if($(this).find("input:radio:checked").length == 0){ 
      requiredMessage(this, "invalid"); 
      sendform = false; 
     } else { 
      requiredMessage(this, "valid"); 
     } 
    } 
// checkboxes case 
    else if($(this).find("input:checkbox").length){ 
     if($(this).find("input:checkbox:checked").length == 0){ 
      requiredMessage(this, "invalid"); 
      sendform = false; 
     } else { 
      requiredMessage(this, "valid"); 
     } 
    } 
// single freetext case 
    else if($(this).find("input:text").length == 1) { 
     if($(this).find("input:text").val() == ""){ 
      requiredMessage(this, "invalid"); 
      sendform = false; 
     } else { 
      requiredMessage(this, "valid"); 
     } 
    } 
// multiple freetext case 
    else if($(this).find("input:text").length > 1) { 
     var content = false; 
     $(this).find("input:text").each(function(){ 
      if($(this).val() != ""){ 
       content = true; 
       requiredMessage(this, "valid"); 
      } 
     }); 
     if(content == false){ 
      requiredMessage(this, "invalid"); 
      sendform = false; 
     } 
    } 
// textarea case 
    else if($(this).find("textarea").length){ 
     if($(this).find("textarea").val() == ""){ 
      requiredMessage(this, "invalid"); 
      sendform = false; 
     } else { 
      requiredMessage(this, "valid"); 
     } 
    } 
    }); 
// check whether the form has errors 
    if(sendform == true){ 
    return true; 
    } else { 
    event.preventDefault(); 
    } 
} 

回答

1

您可以縮小它頗有幾分與選擇,這是非常接近,但不究竟你有什麼邏輯,不妨一試:

function validate(event){ 
    var sendform = true; 
    $(".questionnaire-question-answer").each(function() { 
    var e = $(this).find("input:checked,input:text[value!=''],textarea[value!='']"); 
    //e is input/textarea elements with values 
    if(e.length) { 
     requiredMessage(this, "valid"); 
    } else { 
     requiredMessage(this, "invalid"); 
     sendform = false; 
    } 
    }); 

    if(sendform) return true; 
    event.preventDefault(); 
} 
+0

謝謝,這看起來更多的是我想要的。我會給它一個鏡頭,然後回來! – 2010-10-29 10:15:11

+1

@Justus - 需要一個調整,添加':text'或'[type = text]'選擇器到輸入並進行值檢查,確保在測試時獲得更新。 – 2010-10-29 10:16:53

+0

它就像一個魅力!我很難想到更抽象,但我正在一步一步學習:) – 2010-10-29 10:23:30