![](/img/trans.png)
[英]Add JQuery validation plugin custom method using param with class name
[英]Jquery Custom Rules Validation with Depends and Param Properties
所以我有一個HTML下拉框,其中包含4個值A,B,C和D。還有4個預填充文本框(P1,P2,P3,P4),其中包含一些文本,以及4個空白文本框(B1,B2) ,B3和B4)。
我希望根據在下拉框中選擇的值來應用驗證。
如果下拉值為A,我只想檢查空白文本框B1中的值是否不等於預填充文本框P1中的值,並且B1也不能保留為空白。
與B-> P2.val!= B2.val的下拉框值相同,並且B2不應為空。 其他也一樣。
我想出了一種用於One文本框的方法,但由於某種原因它無法正常工作,不確定是什么問題。 希望能解決我的問題。
以下代碼段的預期結果是,當dropdownbox中包含值A時,才應該繼續檢查兩個文本框中(即P1和B1)中的值是否相同。 !!
的HTML
<form>
<select class="inlineEdit" name="Dropdownbox" id="Dropdownbox">
<option value="A">
A
</option><option value="B">
B
</option><option value="C">
C
</option><option value="D">
D
</option>
</select>
<br/><br/>
<input type="text" name="P1" value="Old Value" />
<br/><br/>
<input type="text" name="B1" />
<button type="submit">Test</button>
</form>
jQuery查詢
jQuery.validator.addMethod("change", function(value, element, param) {
alert(param + " " + value);
return this.optional(element) || value != param;
}, jQuery.format("You must enter {0}"));
$("form").validate({
rules: {
B1: {
required: function(element) {
return $("#Dropdownbox").val() == "A";
},
change: {
param: $("#P1").val(),
depends: function(element) {
return $("#Dropdownbox").val() == "A";
}
}
}
},
debug: true
});
........
您可以嘗試在此處運行以上代碼: http : //jsfiddle.net/
問題是$(“#P1”)。val發送的是true,而不是param中的實際值,這就是為什么它不起作用。 如果我將參數中的值硬編碼,則代碼可以正常工作。 任何解決方案
謝謝,
一些想法:
可能是您缺少P1前面的#號。 如果您試圖將P1標識為名稱,則需要$('[name="P1"]')
。 對於捕獲這樣的問題,如果可以包含實際代碼,而不是放入默認字符串,則將很有幫助。 同樣,您似乎在按名稱標識B1。 如果是id或class之類的東西,那將是您的問題。 由於這樣的原因,擁有包含相關HTML的代碼示例也可能會有所幫助。
除此之外, 你看到了什么影響? 當回答這樣的問題時,既有預期的結果又有實際的結果通常是有幫助的。
考慮到您對語義的關注,答案不外乎是一個建議,我傾向於將所有邏輯保留在jQuery.Validator.addMethod調用中,因為它有助於使語義更簡單,並且所有這些在同一個地方。 我本人看不出您的語義有什么問題。
編輯:是的。 就像我想的那樣。 您正在使用$("#P1")
。 這將為您提供ID為“ P1”的節點。 為了使用JQuery來獲取名稱,您需要使用$('[name="P1"]')
。 或者,您可以設置HTML,以便適當的標記具有與其名稱匹配的ID(就像對Dropdownbox所做的那樣)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.