2013-10-09 46 views
0

我試圖驗證多個輸入字段,首先檢查它是否爲空,然後如果它是數字非零值。這是HTML代碼:通過正則表達式驗證多個輸入值不起作用

<section style="" id="variations_holder"> 
    <div class="con_var"> 
     <input type="text" class="pupc" name="variation[pupc][]"> 
     <input type="text" class="pprice" name="variation[pprice][]"> 
     <input type="text" class="pqty" name="variation[pqty][]"> 

     <input type="text" class="pupc" name="variation[pupc][]"> 
     <input type="text" class="pprice" name="variation[pprice][]"> 
     <input type="text" class="pqty" name="variation[pqty][]"> 
    </div> 
</section> 

現在只有兩個組輸入,但可以是例如三個或更多:

<section style="" id="variations_holder"> 
    <div class="con_var"> 
     <input type="text" class="pupc" name="variation[pupc][]"> 
     <input type="text" class="pprice" name="variation[pprice][]"> 
     <input type="text" class="pqty" name="variation[pqty][]"> 

     <input type="text" class="pupc" name="variation[pupc][]"> 
     <input type="text" class="pprice" name="variation[pprice][]"> 
     <input type="text" class="pqty" name="variation[pqty][]"> 

     <input type="text" class="pupc" name="variation[pupc][]"> 
     <input type="text" class="pprice" name="variation[pprice][]"> 
     <input type="text" class="pqty" name="variation[pqty][]"> 
    </div> 
</section> 

由於它們dinamically產生。現在,這是jQuery代碼我做驗證了我之前說過:它不工作的原因如下

$('#variations_holder input.pprice').each(function() { 
    pprice = $(this).val(); 
    if (!$.trim(this.value).length) { 
     alert($(this).prev('label').text() + ' no se puede dejar vacío!!!'); 
     $(this).focus(); 
     is_valid = false; 
     return false; 
    } 

    if (pprice.match('^[1-9]\d*$') === false) { 
     pprice.addClass('error'); 
    } 
}); 

但是:

  • 只檢查第一場,而不是爲休息
  • 即使我寫了字母而不是數字,也不檢查正則表達式是否爲

什麼是錯?

回答

1
  • return你從你傳遞給each回調回報,正如你返回false,它打破了循環。
  • match永不返回false。改爲使用test
  • 您嘗試將一個類添加到pprice,這是一個字符串。

可以解決這個問題是這樣的:

var is_valid = true; 
$('#variations_holder input.pprice').each(function() { 
    pprice = $.trim(this.value); 
    if (!pprice.length) { 
     alert($(this).prev('label').text() + ' no se puede dejar vacío!!!'); 
     $(this).focus(); 
     is_valid = false; 
    } else if (!/^[1-9]\d*$/.test(pprice)) { 
     $(this).addClass('error'); 
     is_valid = false; 
    } 
});