2012-07-16 75 views
3

我正在使用Position Absolute的表單驗證引擎。職位Absolute的jQuery驗證引擎 - 條件驗證表單域

我有一個驗證的具體情況,我希望這可以爲我解決。我需要能夠根據另一個字段的值創建所需的一個字段。

例如:

If country.dropdown = "USA", then state.dropdown is required. 

If country.dropdown <> 'USA" then state.dropdown is not required. 

你認爲這是可能的jQuery驗證引擎?如果是這樣,你能指出我正確的方向嗎?

回答

1

我必須說,首先,我從來沒有使用位置絕對的表單驗證引擎, ,但我對它感興趣的閱讀你的問題。 從文檔(https://github.com/posabsolute/jQuery-Validation-Engine)看來,您必須創建自定義驗證功能。

我創建了一個工作小提琴這裏:http://jsfiddle.net/5pKjW/6/

即使它的作品,我並不完全滿意,因爲在線路584

的,因爲在驗證引擎這種情況下需要一個「定點值」
// If the rules required is not added, an empty field is not validated 
if(!required && field.val() == "" && !errorMsg) options.isError = false; 

這是選擇枝條的標記的自定義函數:

<select class="validate[funcCall[checkCountry]]" type="text" name="state" id="state"> 
    <option value="none" ></option> 
    <option value="CALIFORNIA" >CALIFORNIA</option> 
    <option value="NEW ENGLAND" >NEW ENGLAND</option> 
    <option value="TEXAS" >TEXAS</option> 
</select> 

這是驗證初始化:

jQuery("#formID").validationEngine({ 
    'customFunctions': { 
     'checkCountry': function (field, rules, i, options){ 
      if ($('#country').val() === 'USA' && field.val() === 'none') { 
       return options.allrules.required.alertText; 
      } 
     } 
    } 
}); 

1)首先,你必須定義可以是全局的,也可以作爲插件的參數傳遞驗證功能(如我上面做的)。一個自定義函數接受這個輸入:field,rules,i,options。 您沒有參考表格,您只能參考當前字段。 所以,如果你想訪問另一個領域,你必須像往常一樣選擇jQuery(例如:$('#country'))。

2)您檢查驗證條件。在下面的示例中它失敗:

$('#country').val() === 'USA' && field.val() === 'none' 

如果不遵守條件,函數必須返回一個字符串。在這個例子中,我在options.allrules.required中返回了標準消息。該文檔解釋瞭如何爲自定義函數定義自定義消息。

正如你所看到的,因爲在驗證引擎的

if(!required && field.val() == "" && !errorMsg) options.isError = false; 

線,開發商被迫作出的條件內if失敗,所要求的條件設置爲true或錯誤信息一個虛假的價值是不正確的。所以唯一的辦法就是製作field.val() != ''。 因此,標記中的第一個選項元素的標記值爲none,而不是空白。這不是一個乾淨的解決方案,甚至可能無法輕鬆實現(我不知道你是否自己生成標記(如果你不這樣做,事情會變得更加困難,而且你需要通過JavaScript處理表單,在驗證引擎初始化之前))。

這不是一個乾淨的解決方案。 一個更好的解決方案應該使用condRequired,如果它只接受一個自定義函數,而不是隻檢查是否其中一個參數已被填充。

+0

Giovanni,這比我預期的要多得多。非常感謝!我會試一試並回復。再次感謝您:) Ike – 2012-07-17 12:55:05

+0

嗨喬瓦尼,我非常感謝您的回覆。我不知道如何將其整合到框架中。我創建了一個自定義函數,並將其包含在主窗體頁面(位於「HELLO」函數下面),並對CSS所需的所有調整等進行了調整。但我認爲我沒有這樣做。謝謝! – 2012-07-17 19:50:19

+0

不幸的是,我應該能夠看看代碼,看看發生了什麼。你可以隨意在jsfiddle.net上創建一個小提琴,甚至更新我發佈的那個。 – 2012-07-17 22:49:42