2015-09-29 70 views
0

我正在使用我構建的驗證器插件,並且每解決一個問題,似乎都會出現一個新問題。目前的問題是,當我使用一個類作爲驗證選擇器時,任何具有該類的類都將被驗證,只要其中一個被填充,那麼它就會被接受。現在,雖然對於某些情況這可能是可以的,但並非如此。表單驗證插件失敗,類

小提琴

http://jsfiddle.net/9gwuyras/2/

的驗證插件的完整代碼可以在小提琴發現爲好。代碼

部分,我認爲這個問題正在引起

用小提琴爲代碼 Lines 497 - 514

推理它可能並不重要類選擇是參考線set.selectors []數組多次,但它是一個可能的選項。

for(var control in controls){ 
    if(typeof controls[control] != 'object'){ 
     console.log("controls."+control+" must be an object. Skipping this element"); 
     continue; 
    }else if(typeof controls[control].validate == 'undefined'){ 
     console.log("controls."+control+".validate must be defined"); 
     continue; 
    } 
    $this.find('input, textarea, select').each(function(){ 
     if($(this).is('#'+control)){ 
      setControlData('#'+control, controls[control]); 
      settings.selectors.push('#'+control); 
     }else if($(this).hasClass(control)){ 
      setControlData('.'+control, controls[control]); 
      settings.selectors.push('.'+control); 
     } 
    }); 
} 

Lines: 397 to 401

的理由是,它可能會針對只是類選擇的任何形式的團體,而不是重點

var formGroup = null; 
if(type != "radio" && type != "checkbox"){ 
    formGroup = $(element).closest('.form-group'); 
    value = $(element).val(); 
} 

這是最我有這麼遠,我將繼續在我完成工作時發佈更新。請申請任何其他可能需要的信息。所有幫助非常感謝!

編輯

我忘了最重要的一塊的情況。插件是如何調用

$('#test').validator({ 
    controls : { 
     name : { 
      validate : "notEmpty" 
     }, 
     dob : { 
      validate : ['notEmpty', 'isDateTime'], 
      dateFormat : 'm/d/Y' 
     }, 
     gender : { 
      validate : "notEmpty" 
     } 
    }, 
    bindInput : true, 
    onSubmit : function(){} 
}); 

controls對象的鍵可以是一個ID或類名。

回答

1

馬克,從我讀過的你試圖創建一個插件來驗證窗體上的ID或類。

你說: 「當前的問題是,當我使用一個類作爲驗證選擇,與該類東西被驗證,只要其中一個被填充,然後被接受。」

發生這種情況的原因是,一旦你的插件被觸發,它會通過匹配該類的任何東西'循環'(你的每個循環),即使包裝在該類中的元素只填充一次(並且還有其他多個實例)。

你有很多選擇,我的建議是:1)刪除插件調用類的能力或2)通過檢查它的狀態來驗證類。現在它只會通過並嘗試驗證所有應該基於狀態驗證一個類(checked,unchecked,.val等)。

希望是有道理的。