2012-06-16 3 views
1

У меня есть следующий HTML-код:Jquery проверка: динамический инлайн проверка

<form> 
    <table> 
    <tbody> 
     <tr> 
      <td> 
       <span>Quantity<span class="pull-right">3</span> 
       <input type="hidden" class="" value="3" name="quantity[]"> 
      </td> 
      <td class="form-inline"> 
       <label>Cantidad Warehouse</label> 
       <input id="qty_warehouse_1" type="text" name="cantidad_despacho[]" class="required input-mini"> 
      </td> 
     </tr> 
     <tr> 
     <tr> 
      <td> 
       <span>Quantity<span class="pull-right">5</span> 
       <input type="hidden" class="" value="5" name="quantity[]"> 
      </td> 
      <td class="form-inline"> 
       <label>Cantidad Warehouse</label> 
       <input id="qty_warehouse_2" type="text" name="cantidad_despacho[]" class="required input-mini"> 
      </td> 
     </tr> 
     <tr> 
    </tbody> 
</table> 
      <button id="submit" value="send" name="button">Send</button> 
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

где каждая строка динамически генерируется. Мне нужно выполнить валидацию для каждого входа с именем Qty_warehouse, поэтому его максимальное значение не будет больше скрытого значения в той же строке. Это то, что я пытался сделать:

$(document).ready(function() { 
    $("form").validate(); 
    $("[id*='qty_warehouse']").rules("add", { 
     required: true, 
     max: function() { 
     return $(this).parents("tr").eq(0).find("input[name='quantity[]']").val(); 
     }, 
     min: 0, 
     messages: { 
      required: "Introduzca la cantidad disponible en despacho" 
     } 
    }); 

    $("#submit").click(function() { 
     alert($("form").valid()); 
    }); 
});​ 

Любая помощь будет принята с благодарностью. это ссылка на скрипку, если вы хотите сделать некоторые тесты. Fiddle

+0

это был просто пример кода. Исходный код - это таблица с большим количеством данных, а не с макетами, и все метки указывают на их активный тег ввода. –

ответ

2

В вашей max функция this не так, как вы думаете, это window. Чтобы проверить, просто вызовите console.log(this) внутри функции и проверьте в консоли браузера.

Добавить аргумент для элемента в функцию max и использовать его для запуска траверса. Также преобразуйте входное значение в число.

max: function(element) { 
     var max= $(element).parents("tr").eq(0).find("input[name='quantity[]']").val();  
     return 1*max; 
    } 

DEMO: http://jsfiddle.net/wHdKt/1/

+0

Большое спасибо! Я не знал, что вы можете передать аргументы этой функции. –

+1

, честно говоря, я не знал, что вы могли бы так, чтобы я мог предположить. Я передал несколько аргументов, запустил их в консоли, чтобы узнать, были ли они определены и какими они могут быть, и придумал решение таким образом – charlietfl

Смежные вопросы