2012-08-28 84 views
0

我正在使用jQuery驗證有點複雜的形式。驗證規則通過將代碼分配給表單字段添加到代碼中,但我似乎無法使用額外的參數處理它。我沒有太多的運氣,我害怕jQuery文檔。jQuery驗證中的額外參數

下面是一個例子,它對我有什麼作用,什麼沒有,這個例子顯然不是很有用。


工作(顯示了什麼,但a誤差)

(僞代碼)

$fieldXclasses = "myrule"; 

生成的HTML

<input id="x" name="x" value="fromdatabase" class="myrule error" type="text"> 

JS方法:

jQuery.validator.addMethod("myrule", function(value, element) { 
    return this.optional(element) || /^a$/.test(value); 
}, "Please enter 'a'"); 

它與「fromdatabase」中的額外類有「錯誤」顯然不是a,所以它失敗了「myrule」函數。當我在該字段中鍵入a時,它將按預期更改爲class="docnmr valid"。我從這裏得出的答案是,我的驗證設置適用於簡單的情況,所以我不需要在如何加載驗證插件時查找錯誤。


不工作:

(僞代碼)

$fieldXclasses = "myrule:1"; 

生成的HTML

<input id="x" name="x" value="fromdatabase" class="myrule:1 valid" type="text"> 

JS方法:

jQuery.validator.addMethod("myrule", function(value, element,param) { 
    return this.optional(element) || /^a$/.test(value); 
}, "Please enter 'a'"); 

現在初始狀態從開始就是錯誤的:它應該是錯誤而不是有效的,因爲它不符合要求。我假設類myrule:1未被解析爲以1作爲參數調用myrule函數的內容。但這是我認爲是添加參數的方式,儘管在jquery文檔中我找不到正確的方法。

任何人都可以啓發我如何添加額外的參數?

對於背景:最終目標是使用另一個字段值作爲參數,因爲它們取決於彼此。另一種選擇可能當然是忘記參數,並且我們在規則中尋找正確的字段的this對象。不知道這是否可行。

+0

從可用元素的數量不容易處理的意義上講,這是否會以「動態」形式結束?如果不是這種情況,爲什麼不從元素中查找你所包含的值? – jett

+0

我不確定你的意思。函數中的'regex'取決於某個特定的字段,但它所依賴的可能值是有限的。我真的很想將這些信息作爲參數或其他東西傳遞,否則表單會有某種「魔法ID」,其中一個驗證依賴於其中。這對於一個表單來說是可以的,但是如果你重新使用這個函數,那麼強制使用某個特定名稱的元素是非常棘手的,所以驗證是有效的。或者你知道解決方法嗎? – Nanne

+0

我腦海中想到的是一個結構,它包含着要處理的元素。這可以通過一個簡單的表格填充這些數據來處理。實際上,只需要編寫一個'addVFormLookup(e_form,e1,e2) '爲你需要的每個表單元素。然後只需要一個函數來從中找到正確的元素。 – jett

回答

1

有兩種選擇,其中都沒有涉及到使用class屬性。你可以指定一個像myrule="1"的屬性和值在你的輸入,並會做你想要什麼:

<input id="x" name="x" value="fromdatabase" myrule="1" type="text"> 

或者,在你調用validate,你可以指定一個像這樣的規則:

$('form').validate({ 
... 
rules: { 
    ... 
    x: { 
     myrule: 1 
    }, 
    ... 
} 
}); 

有關第一種方式的一個簡單示例,請參見:http://jsfiddle.net/ryleyb/2E6k9/

+0

這聽起來不錯! – Nanne