2014-08-27 108 views
0

我有一个表单,其输入复选框与示例中的复选框类似。 js代码从检查的输入值中提取数字,并将它们输出到彼此旁边。如何编辑代码,以便在检查第二个输入复选框时输出是数字的总和?表单提交前所有检查的输入字段值的JS输出总和(仅数字)

这是PHP形式:

<input type="checkbox" onchange="toggleCheckbox(this)" value="abc 1 def" name="1"> 
<input type="checkbox" onchange="toggleCheckbox(this)" value="abc 2 def" name="2"> 
<input type="checkbox" onchange="toggleCheckbox(this)" value="abc 3 def" name="3"> 

中的JavaScript我使用:

<script type="text/javascript"> 
    function toggleCheckbox(element){ 
     if (element.checked){ 
     var number = element.value.replace (/[^\d.]/g, ''); 
     document.getElementById("test").innerHTML += " " + number; 
     } 
} 
</script> 

HTML字段:

<p id="test"></p> 
+1

使用一个变量来保存总和..把它放在你的函数的范围之内,在检查中添加新的价值,并打印,代替数... – 2014-08-27 13:38:00

+0

好给值只是数字,然后如果只是添加em .. – Naruto 2014-08-27 13:38:53

回答

1

您可以在accomulated值存储在一个全局变量,如:

var sum = 0; 

function toggleCheckbox(element){ 
     var number = element.value.replace (/[^\d.]/g, ''); 
     if (element.checked) 
      sum += Number(number); 
     else 
      sum -= Number(number); 
     document.getElementById("test").innerHTML = sum; 
} 

演示小提琴:http://jsfiddle.net/lparcerisa/08hLc37a/

使用jQuery,这是可以做到这样:

$("input[type=checkbox]").click(function(){ 
    var sum=0; 
    $("input[type=checkbox]:checked").each(function(index){ 
     sum += Number($(this).val().replace(/[^\d.]/g,'')); 
    }); 
    $("#test").html(sum); 
}); 

Demo小提琴(jquery):http://jsfiddle.net/lparcerisa/res4k96j/2/

0

一种方法(给定修改的HTML,下面的jQuery)是:

function toggleCheckbox(element) { 
    if (element.checked) { 
     var number = element.value.replace(/[^\d.]/g, ''); 
     document.getElementById("test").innerHTML += " " + number; 
    } 
} 

// binding the change-event handler using jQuery, outside of the HTML:  
$('input[type="checkbox"]').on('change', function() { 
    toggleCheckbox(this); 
}); 

// binding the click-event handler: 
$('#total').on('click', function(){ 
    // using split() to get an array of the numbers: 
    var numbers = $('#test').text().split(' '), 
    // using Array.reduce() to iterate over the elements of the array: 
     total = numbers.reduce(function(a,b) { 
      // using '(+a) + (+b)' to coerce the array elements to numbers 
      // (from strings) and then summing them together: 
      return (+a) + (+b); 
     }); 
    // setting the text of the '#result' element: 
    $('#result').text('(' + total + ')'); 
}); 

JS Fiddle demo

修订的HTML:

<input type="checkbox" value="abc 1 def" name="1" /> 
<input type="checkbox" value="abc 2 def" name="2" /> 
<input type="checkbox" value="abc 3 def" name="3" /> 
<button id="total">Find the total</button> 
<span id="test"></span><span id="result"></span> 

参考文献: