我有一个简单的形式
<tr> <td> <input type="text" name="qty[]" placeholder="qty"/> </td> <td> <input type="text" name="price[]" placeholder="price"/> </td> <td> <input type="text" name="total[]" placeholder="Total"/> </td> </tr>
我们可以有多行与上面相同.
我尝试了什么
$('input[name=\'qty[]\']').on('change keyup',function(){ var qty = $(this).val(); var price = $(this).parent('tr').find('input[name=\'price[]\']').val(); });
价格未定义
更新:
.parent(..)选择当前元素集中每个元素的直接父元素.第一个参数过滤此集合. input元素的直接父元素是td元素,而不是tr元素.
更新Fiddle
解决方法
首先,考虑制作你的html:
<tr> <td> <input type="number" name="qty[]" placeholder="qty"/> </td> <td> <input type="number" name="price[]" placeholder="price"/> </td> <td> <input type="number" name="total[]" placeholder="Total"/> </td> </tr>
也.到目前为止javascript:
jQuery(document).on("change,keyup","input[name='qty[]'],input[name='price[]']",function(){ var parent_element = jQuery(this).closest("tr"); var qty = jQuery(parent_element).find("input[name='qty[]']").val(); var price = jQuery(parent_element).find("input[name='price[]']").val(); if( qty.trim() != "" && price.trim() != "") { jQuery(parent_element).find("input[name='total[]']").val( parseFloat(qty) *parseFloat(price) ); } else { jQuery(parent_element).find("input[name='total[]']").val(""); } });
编辑:更好的方法,适当考虑空字段