2012-03-05 2 views
0

Я не могу понять, что это правильно. Я ищу правильный jQuery, чтобы делать математику на одном видимом и 4 скрытых полях, но чтобы сделать это проще, мне нужен только один из них.jquery math in repeat

Я пытаюсь получить число, введенное во вход «oh», и вычислить его при размытии поля «oh» в этой строке. Математика была бы ом, и результат будет отображаться в промежутке с id "ord".

Я пробовал несколько разных подходов, но мне было любопытно, к чему придут профессионалы. Я могу заставить его работать с одной строкой, но не корректно для следующей строки.

+3

Первая проблема: вы не можете иметь один и тот же идентификатор более чем один раз на одной странице. В вашем примере у вас будет число X пар, moq's, mot's, pack на основе количества строк. Если у вас есть 4 строки, у вас будут элементы с идентификатором par. –

ответ

0

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

т.е.

<input name="par" class="par" /* snip */ /> 
<input name="moq"class="moq" /* snip */ /> 

и, наконец,

<span class="ord"></span> 

Поскольку размытость события не пузырь, вам придется идти с отдельными слушателями событий:

$('#newOrder').find('tbody').find('.oh').bind('blur', function() { 
    var $this = $(this), 
     $parentRow = $this.closest('tr'), 
     // Assuming it's integer values, parseFloat otherwise (without the radix). 
     // || 0 is a fallback value in case the values do not resemble valid ints 
     // you may want to add more sensible validation instead though 
     ohVal = parseInt($this.val(), 10) || 0, 
     parVal = parseInt($parentRow.find('.par').text(), 10) || 0; 

    $parentRow.find('.ord').text(ohVal - parVal); 
}); 
+0

Я должен упомянуть, что я не против изменения кода в любом случае - я бы хотел, чтобы была самая чистая возможность. Спасибо за помощь! Он отлично работает таким образом – beaklessChicken

0

Вот траверса что не требует каких-либо изменений разметки, хотя использование класса вместо идентификатора было бы более чистым.

Оставит его к вам для проверки номера действительны, прежде чем делать математику

$('[name="oh"]').blur(function(){ 
     var $row=$(this).closest('tr'); 
     var par=$row.find('[name="par"]').val(); 
     $row.find('td:last span').text($(this).val()-par)      
    })​