2012-05-15 115 views
1

我有一個下拉稱爲answerYesNo_1。如果用戶選取「是」的選項,我想強迫用戶輸入一個有效的貨幣價值answerYesNoText_1場。我如何鏈接這兩個規則?我在這裏遇到了一些麻煩。下面的代碼驗證何時選擇了選項yes。不過,我可以輸入像「asdad」這樣的值,它會通過。這就好像我想說的,是的,它是必需的,是的,去做測試。jQuery和驗證插件

rules: { 
      answerYesNoText_1: { required : { depends:function(){ if ($('#answerYesNo_1').val() == 'yes') { 
       if (/^\$?[0-9][0-9\,]*(\.\d{1,2})?$|^\$?[\.]([\d][\d]?)$/.test($('#answerYesNoText_1').val()) != true) {   
        return true;} } } 
              } 
           } 
    }, 

,這裏是我的領域:

<select name="answerYesNo_1" id="answerYesNo_1" style="width:60px; font-size:11px;"> 
    <option value=""></option> 
    <option value="yes">Yes</option> 
    <option value="no">No</option> 
</select> 
<input type="text" name="answerYesNoText_1" id="answerYesNoText_1" class="answers" value="" maxlength="60" /> 

回答

0

試試這個檢查,如果輸入的是數字,而不是這種心態令人難以置信過於複雜的正則表達式,你曾去那兒

if (!isNaN(parseFloat($('#answerYesNoText_1').val()))) { 
    return true; 
} 
+0

我想讓他們進入類似$ 23,000.32值。 – CFNinja

+0

@FALCONSEYE:嗯,在這種情況下,看到我更新的答案。我使用'parseFloat'而不是創建一個新的'Number',因爲它很好地處理了小數點。 –

+0

的事情是我想讓它需要的,也是一個有效的貨幣價值。當我使用這些,它不是一個錢的價值,那麼它不是必需的。當它是貨幣價值的時候,它是必需的。 – CFNinja

1

一種解決方法是使用掩碼強制用戶輸入有效的貨幣編號。我一直在使用maskmoney,並且工作得很好。

https://github.com/plentz/jquery-maskmoney

if($('#answerYesNo_1 option:selected').val() == 'yes'){ 
    $("#answerYesNoText_1").maskMoney(); 
} 
+0

我有一個更改事件附加到answerYesNoText_1。當我使用maskMoney()時,更改事件不再被觸發。 – CFNinja

+0

@FALCONSEYE你可以試試最新版本嗎? –

0

我認爲這是最好的required和有效的貨幣規則分開,像:

rules: { 
    answerYesNoText_1: { 
     required: function(){ 
      if ($('#answerYesNo_1').val() == 'yes'){ 
       return true; 
      } 
      return false; 
     } 
    } 
} 

並添加驗證規則使用$.validator.addMethod的貨幣價值支票給你正則表達式是正確的。

0

我會做的就是添加一個onchange事件處理程序的時候選擇了「是」這將增加一個驗證類的文本輸入字段,並消除類時,它不是選擇元素。您可能需要每次都重新初始化表單驗證對象,但至少驗證會以這種方式「鏈接」。