2010-01-28 114 views
4

我需要输入中所有值的总和。结果必须显示在输入字段总数readonly中。使用jQuery获取所有输入值的总和

用户可以输入1个或多个值。问题是我的var值不正确。我还想知道如何通过onchange立即返回价值?

$(document).ready(function() { 
    $("div#example input").change(function() { 
    var value = '';  
    $("div#example input[name!=total]").each(function() { 
     value += $(this).val();  
    }); 
    console.log("value after each: " + value); 
    }); 
}) 

HTML:

<div id="example"> 
    <input type="text" size="5" id="value1" name="value1" /> 
    <input type="text" size="5" id="value2" name="value2" /> 
    <input type="text" size="5" id="value3" name="value3" /> 
    <input type="text" size="5" id="value4" name="value4" /> 
    <input type="text" size="5" id="value5" name="value5" /> 
    <input type="text" size="5" id="total" readonly="readonly" class="bckground" name="total" /> 

回答

2

使用+ = parseInt函数($(本).VAL());

+0

+1 parseInt函数 – 2010-01-28 19:24:50

+1

或parseFloat/...双人床,因为你需要... – roman 2010-01-28 19:25:22

+0

以及我如何返回值? – lander 2010-01-28 19:26:42

1
var sum = 0; 
$('input[id^=value]').each (function(){ sum+=$(this).val(); }); 
$('#total').val(sum); 

:]

+0

谁upvoted这???它惨淡地失败。 – 2010-01-28 19:33:10

+0

嗯,这是一般的想法,没有完全消毒的输入... – 2010-01-28 20:18:04

+0

没有将val()的结果转换为数字值,这将执行不是所需的字符串连接。 – 2010-01-28 22:45:27

4

尝试是这样的:

$(document).ready(function() { 
    $("div#example id^='value'").change(function() { 
     var value = 0; 

     $("div#example input[name!=total]").each(function() { 
      var i = parseInt($(this).val()); 

      if (!isNaN(i)) 
      { 
       value += i; 
      } 
     }); 

     $('#total').val(value); 
    }); 
}) 
+0

鲍比我试图遵循这一点,你可以请添加一些上下文来执行?每次输入字段更新时都会运行吗(无需提交)? – 2014-03-11 23:51:56

+0

@square_eyes:是的,传递给change()的函数会在任何输入发生变化时执行,但请记住,javascript会将“更改”解释为“文字输入的新值失去焦点” - 即键入数字,则移出输入字段,更改事件触发。像Bobby说的 – 2014-03-12 22:52:27

0

我认为这可能是更接近:

<script type="text/javascript"> 

$(document).ready(function() { 

    $("#example value").change(function() { 
    var total = 0;  
    $("#example value").each(function() { 
     total += parseInt($(this).val());  
    }); 
    window.console && console.log("value after each: " + total); 
    }); 
}) 

</script> 

<div id="example"> 
    <input type="text" size="5" class="value" name="value1" /> 
    <input type="text" size="5" class="value" name="value2" /> 
    <input type="text" size="5" class="value" name="value3" /> 
    <input type="text" size="5" class="value" name="value4" /> 
    <input type="text" size="5" class="value" name="value5" /> 
    <input type="text" size="5" id="total" readonly="readonly" class="bckground" name="total" /> 
</div> 

您的$ .change原来选择()被包括整个盒子,我怀疑你不想要。

我正确猜测你想添加数字吗?你原来的'值'变量是一个字符串。

顺便说一句,使用'window.console & &'console.log'成语更安全,因为许多用户不会有控制台变量。基于其他建议(虽然我敢打赌,该行只在那里进行调试。)

编辑

新增parseInt函数()。

+0

,我需要isNaN。然后,总和是正确的 – lander 2010-01-28 19:34:59

+0

'嫌疑人' - 但你不知道;-)我想知道如果改变()实际上触发时,价值改变编程方式,使用val()函数。它不会*出现*给我 – 2010-01-28 19:36:51