在表单提交之前,JS输出所有已检查输入字段值的总和(仅数字)

时间:2014-08-27 13:34:24

标签: javascript php jquery

我有一个表单,其中包含类似示例中的输入复选框。 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>

2 个答案:

答案 0 :(得分:1)

您可以将容纳值存储在全局变量中,例如:

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);
} );

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

答案 1 :(得分: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>

参考文献: