从输入在一起的jQuery

问题描述:

添加值我有以下表格:从输入在一起的jQuery

<table> 
    <thead> 
     <tr> 
      <th></th> 
      <th>Female</th> 
      <th>Male</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>Rising 1</td> 
      <td> 
       <input id="firstinput" /> 
      </td> 
      <td> 
       <input id="secondinput" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Rising 2</td> 
      <td> 
       <input id="thirdinput" /> 
      </td> 
      <td> 
       <input id="fourthinput" /> 
      </td> 
     </tr> 
     <tr> 
      <td>2+</td> 
      <td> 
       <input id="fifthinput" /> 
      </td> 
      <td> 
       <input id="sixthinput" /> 
      </td> 
     </tr> 
    </tbody> 
</table> 

我想在这些输入添加所有值加在一起,并显示他们的价值:

$(document).ready(function() { 

     $('#mybutton').click(function() { 

      alert(parseInt($('#firstinput').val()) + 
       parseInt($('#secondinput').val()) + 
       parseInt($('#thirdinput).val()) + 
       parseInt($('#fourthinput').val()) + 
       parseInt($('#fifthinput).val()) + 
       parseInt($('#sixthinput').val())); 
     }); 
}); 

嗯,这只有当表中存在所有值时才有效。如果有人是空的,最终会得到NaN。

你如何解决这个问题?

我也接近这完全错了吗?有没有更好的方法来实现这一目标?

你可以简单地把它变成一个或条款:

var total = 0; 

$('input').each(function() { 
    total += (+$(this).val() || 0); 
}); 

alert(total); 

记住:+$(this).val()是一个捷径parseInt($(this).val())。虽然这很方便,但它有与parseInt相同的问题;即如果字符串以0开头,则将其解析为基地8:parseInt(“033”); // 27 +“033”; // 27要绝对确定不会发生,请使用parseInt,并以10为底:parseInt(“033”,10); // 33所以,在我们的上下文中,你会使用这个:total + =(parseInt($(this).val(),10)|| 0);

+0

我喜欢使用'+'将val转换为int。这绝对是最好的答案。 – 2012-07-11 23:27:53

+0

@GregGuida - 虽然非常方便,但有一个问题。看我的帖子。 – 2012-07-11 23:34:58

+0

是的,我明白了,但是看看第一种方式就好多了,哈哈。你几乎可以把它放在一条线上。 – 2012-07-11 23:43:59

NaN是错误的,因此如果第一个值为false,您可以使用或运算符(||)返回第二个值。

$(document).ready(function() { 

     $('#mybutton').click(function() { 

      alert(parseInt($('#firstinput').val()) || 0 + 
       parseInt($('#secondinput').val()) || 0 + 
       parseInt($('#thirdinput').val()) || 0 + 
       parseInt($('#fourthinput').val()) || 0 + 
       parseInt($('#fifthinput').val()) || 0 + 
       parseInt($('#sixthinput').val()) || 0); 
     }); 
}); 

在你的代码中,parseInt($('#sixthinput').val())的改变parseInt($('#sixthinput').val() || 0)。这样,如果它为空则返回0,如果输入无效则返回NaN。

+0

的'|| 0'必须在'parseInt'之后,而不是在它之后 – 2012-07-11 23:25:22

+3

@GregGuida那不是我害怕的情况。奇怪的是,在JavaScript中,表达式“”“|| 0'将评估为0. – 2012-07-11 23:27:43

+0

@mikhailvs - 但是,如果在该字符串的开始处有任何非数字文本,它将会是真实的,并且您仍然会以'NaN'结尾。 – 2012-07-11 23:33:00

试试这个:

$('#mybutton').click(function() { 
    var sum = 0; 
    $('input').each(function(){ 
     var val = parseInt(this.value, 10) 
     if (isNaN(val)) { val = 0 } 
     sum += val 
    }) 
}); 

DEMO

+2

+1还有bruver! – 2012-07-11 23:26:44

$("#mybutton").click(function(){ 
alert(addValues($("input"))); 
}); 

function addValues(selector){ 
    var total = 0; 
    selector.each(function(){ 
     var thisVal = parseInt($(this).val()); 
     if(!isNaN(thisVal)) total += thisVal; 
    }); 
    return total; 
} 

请使用isNaN()来可靠检查,如果值不是数字。

上面为了简单起见,我已将它添加到函数中。

+0

+1给你也我们都似乎都在想着一样的大声笑。 – 2012-07-11 23:27:11

$('#myButton').click(function() { 
    var sum = 0; 
    $('table input').each(function(){ 
     val = parseInt($(this).val(),10); 
     sum += isNaN(val) ? 0 : val; 
    } 
    alert(sum); 
} 

务必使0809解析正确包括10基数在调用parseInt

+0

和+1给你 – 2012-07-11 23:27:18

PLZ试试这个Workingdemohttp://jsfiddle.net/SmRXL/4/http://jsfiddle.net/SmRXL/3/

你可以使用类和迭代,并总结了这一切。

休息演示将帮助,`:)

代码

$(function() { 
    $('#foo').click(function() { 
     var total = 0; 
     $('.hulk').each(function() { 
      if ($(this).val() > 0) total += parseInt($(this).val()); 
     }); 
     alert(" TOTAL is => " + total); 
    }); 
}); 

HTML

<table> 
    <thead> 
     <tr> 
      <th></th> 
      <th>Female</th> 
      <th>Male</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>Rising 1</td> 
      <td> 
       <input class="hulk" id="firstinput" /> 
      </td> 
      <td> 
       <input class="hulk" id="secondinput" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Rising 2</td> 
      <td> 
       <input class="hulk" id="thirdinput" /> 
      </td> 
      <td> 
       <input class="hulk" id="fourthinput" /> 
      </td> 
     </tr> 
     <tr> 
      <td>2+</td> 
      <td> 
       <input class="hulk" id="fifthinput" /> 
      </td> 
      <td> 
       <input class="hulk" id="sixthinput" /> 
      </td> 
     </tr> 
    </tbody> 
</table> 

<input type="button" id="foo" value="TOTAL ME" /> 
+0

将'total'移到点击事件中,它一直在增加。 – 2012-07-11 23:33:20

+0

@RicardoLohmann欢呼,在这里你去:http://jsfiddle.net/SmRXL/4/':)' – 2012-07-12 01:07:26