2012-03-26 54 views
1

所以我有一個HTML下拉框4值A,B,C和D.和4預填充文本框(P1,P2,P3,P4)與一些文本在他們和4空白文本框(B1,B2,B3和B4)。jquery自定義規則驗證與取決於和參數屬性

我希望根據在下拉框中選擇什麼值來應用驗證。

如果下拉值爲A,我只想檢查空白文本框B1中的值不等於預先填充的文本框中的值P1,並且B1也不能留爲空白。

與B - > P2.val!= B2.val相同的下拉框值,B2不應該爲空。同樣適用於其他。

我想出了這種方法的一個文本框,但它不工作,不知道什麼是錯的。希望能解決我的問題。

下面的代碼片段的預期結果是,當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中的實際值,這就是爲什麼它不起作用。如果我硬編碼param中的值,代碼工作正常。任何解決方案

感謝,

+0

您是否在DropdownA前丟失了#號? – JSager 2012-03-26 18:07:18

+0

amm不,我將#sign放在原始代碼中。 – Nanu 2012-03-26 18:58:38

+0

好吧,如果你沒有發佈原始代碼,它會變得更加困難,但是我也可以看到你在改變對象之後遺漏了一個關閉點(你關閉了,取決於,但是沒有改變) – JSager 2012-03-26 20:17:54

回答

0

的一點想法:

這可能是因爲你缺少在P1前面的#號。如果您試圖將P1標識爲名稱,則需要$('[name="P1"]')。爲了捕捉像這樣的thights,這將有助於如果你可以包含實際的代碼,而不是放入默認的字符串。同樣,它看起來像你正在通過名稱來識別B1。如果它是id或類或其他東西,那將是你的問題。出於這個原因,使用包含相關HTML的代碼示例也可能會有所幫助。

除此之外,你看到什麼效果?在回答這樣的問題時,通常既有預期的結果也有實際的結果。

因爲您有語義問題,所以不會回答太多問題,我傾向於保留jQuery.Validator.addMethod調用中的所有邏輯,因爲它有助於保持語義更簡單一些,全部在同一個地方。我自己看不出你的語義有什麼問題。

編輯:是的。就像我想的那樣。您正在使用$("#P1")。這會給你帶有「P1」Id的節點。爲了使用JQuery來獲取名稱,您需要使用$('[name="P1"]')。或者,您可以設置您的HTML,以便相應的標記具有與其名稱相匹配的標識(就像您使用Dropdownbox一樣)。

+0

本,我更新了包含#符號的代碼,我希望這會限制混淆。上面這篇文章的預期結果是,當dropdownbox的值爲A時,它應該只有這樣,才能檢查兩個文本框中的值是否相同,即在P1和B1中。 ! – Nanu 2012-03-26 20:40:11

+0

你能把這個變成一個jsfiddle嗎?當你只看到問題的一部分時,幫助某人調試某些東西是很難的。 – JSager 2012-03-26 21:01:09

+0

我把上面的jsfiddle,編譯沒有錯誤。但仍然無法正常工作。我懷疑params和取決於屬性。任何線索? – Nanu 2012-03-26 22:01:30