2014-02-21 109 views
0

我在尝试使用JQuery将输入的值相乘。将输入与JQuery相乘

<tr> 
     <td><input type="text" name="qtd[1]" size="2" /></td> 
     <td><input type="text" name="price[1]" size="10" /></td> 
     <td><input type="text" name="total[1]" size="10" /></td> 
    </tr> 
    <tr> 
     <td><input type="text" name="qtd[2]" size="2" /></td> 
     <td><input type="text" name="price[2]" size="10" /></td> 
     <td><input type="text" name="total[2]" size="10" /></td> 
    </tr> 
<input type="hidden" value="2" name="qtd_itens" /> 

基本上我试图表现出总[I]只要用户填写QTD [i]和价格[I] ..

$(':input').bind('keypress keydown keyup change',function(){ 
    for ($i = 0; $i < $(':input[name="qtd_itens"]').val(); $i++) 

    var acho = parseFloat($(':input[name="qtd[' + $i + ' ]"]').val(),10), 
    alto = parseFloat($(':input[name="price[' + $i + ']"]').val(),10); 

    var v = ''; 
    if (!isNaN(acho) && !isNaN(alto)){ 
     v = (acho * alto); 
    } 
    $(':input[name="total[' + $i + ']"]').val(v.toString()); 
} 
}); 

任何帮助吗?

代码:http://jsfiddle.net/gilbertogm85/XSAk5/1/

回答

0

。在你的代码中的语法错误,为for语句中缺少{。另请注意,parseFloat函数只接受1个参数,似乎您想使用接受radix作为第二个参数的parseInt函数。

而不是使用for循环这是没有必要的,你可以选择最接近tr后的设定值:

$('input').on('keyup change', function (e) { 
    var $i = $(this).closest('tr').find('input'), 
     acho = parseFloat($i.eq(0).val()), 
     alto = parseFloat($i.eq(1).val()), 
     val = (acho * alto); 

    if (!isNaN(val)) { 
     $i.eq(2).val(val); 
    } 
}); 
+0

更好的工作。 。但同样的事情..忽略逗号后的数字..我怎么能不忽略这些数字? – ledesma

+0

@GilbertoGonçalvesMachado您可以使用JavaScript替换方法替换空字符串的逗号。计算后,您可以使用正则表达式格式化结果。 SO上有很多相关的问题。 – undefined

1

你可以尝试像this

$(function(){ 
    $('input[name^="price"]').on('keyup change',function(){ 
     var prc = $(this), 
      qty = prc.closest('tr').find('input[name^="qtd"]'), 
      tot = prc.closest('tr').find('input[name^="total"]'); 
     if(check(prc.val()) && check(qty.val())) { 
      var p = parseFloat((prc.val()).replace(',','')), 
       q = parseFloat((qty.val()).replace(',', '')), 
       total = p * q; 
      $(tot.val(total.toFixed(2))); 
     } 
    }); 

    function check($val) { return $val.match("^[0-9,\.]+$"); } 
}); 
+1

工作正常..我只有另一个问题..我们使用价格像1.230,00,但如果我把它作为一个价格,它给了我一个NaN结果..我怎么能解决这个问题?另外..我改变了这一行var total = prc.val()* parseFloat(qty.val(),2); – ledesma

+0

@GilbertoGonçalvesMachado,用例子更新了答案。 –

+0

没有工作...我试过数量3和价格3.120,00应该给我总计9.360,00,它给我9.36 ...你知道什么是错的? – ledesma