2017-04-18 74 views
1

根据以下答案,我编辑了该帖子以提供更多详细信息。感谢大家。Javascript - 计算数组的复选框总和

编辑:

这是我的代码有:

@foreach($amount_data as $amount)       
<div class="col-sm-12">        
<div class="input-checkbox">        
<div class="inner"></div> 
<input type="checkbox" name="items[]" value="{{$amount->amount}}" onchange="checkTotal()" /> 
</div> 
<span>{{$amount->item_name}} - <b>{{$amount->amount}} {{$form->currency}}</b></span> 
</div> 
@endforeach 
<br/> Total: <input type="text" size="2" name="total" value="0" /> 
@endif 

的Javascript:

<script type="text/javascript"> 

function checkTotal() { 
var sum = 0, 
frm = document.getElementById("payment-form"), 
cbs = frm["items[]"], 
i; 
for (i = 0; i < cbs.length; i++) { 
if (cbs[i].checked) { 
sum += parseInt(cbs[i].value); 
} 
} 
frm.total.value = sum; 
} 

</script> 

表格信息:

<form action="{{url('secure-checkout/'.$form->unique_url_code)}}" method="POST" id="payment-form" name="payment-form"> 

似乎并没有工作。控制台没有错误。哪里不对了?

+0

没有使用jQuery?只要确定。 – blackandorangecat

+0

这是我在网上发现的唯一可以自行工作的代码。不过,我可以将它整合到我的表格中。我将jQuery加载到我的页面以及用于其他目的。 –

+0

请格式化您的代码,使其可读。 – thecoolmacdude

回答

0

您需要使用的,因为[]的名称

document.listForm["items[]"][i].checked 

function checkTotal() { 
 
    var sum = 0, 
 
    frm = document.getElementById("payment-form"), 
 
    cbs = frm["items[]"], 
 
    i; 
 
    for (i = 0; i < cbs.length; i++) { 
 
    if (cbs[i].checked) { 
 
     sum += parseInt(cbs[i].value); 
 
    } 
 
    } 
 
    frm.total.value = sum; 
 
}
<form name="payment-form" id="payment-form"> 
 
    <input type="checkbox" name="items[]" value="2" onchange="checkTotal()" />2<br/> 
 
    <input type="checkbox" name="items[]" value="5" onchange="checkTotal()" />5<br/> 
 
    <input type="checkbox" name="items[]" value="10" onchange="checkTotal()" />10<br/> 
 
    <input type="checkbox" name="items[]" value="20" onchange="checkTotal()" />20<br/> 
 
    Total: <input type="text" size="2" name="total" value="0" /> 
 
</form>

+0

刚刚尝试过。这是我的形式。所以我用付款方式替换了listForm,我得到了错误。 Uncaught ReferenceError:分配中无效的左侧

unique_url_code)}}”method =“POST”id =“payment-form”name =“payment-form”> –

+0

,因为它认为你正试图减去这两个项目。 'payment-form',你还需要使用括号表示...我会用你的id修复答案。 – epascarello

+0

我刚刚编辑我的OP。似乎没有工作。我知道一些小事。控制台没有错误。 –

0

你可以得到选中的复选框列的求和简单地使用Array.prototype.reduce()的括号标记:

function checkTotal() { 
 
    document.listForm.total.value = Array.prototype.reduce.call(
 
    document.listForm.choice, 
 
    function (sum, el) { 
 
     return el.checked ? sum + +el.value : sum; 
 
    }, 0 
 
); 
 
}
<form name="listForm"> 
 
    <input type="checkbox" name="choice" value="2" onchange="checkTotal()"/>2<br/> 
 
    <input type="checkbox" name="choice" value="5" onchange="checkTotal()"/>5<br/> 
 
    <input type="checkbox" name="choice" value="10" onchange="checkTotal()"/>10<br/> 
 
    <input type="checkbox" name="choice" value="20" onchange="checkTotal()"/>20<br/> 
 
    Total: <input type="text" size="2" name="total" value="0"/> 
 
</form>

+0

并没有真正回答OP问题。 – epascarello

+0

@epascarello改进解决问题的方法也是一个答案 –

+0

,但它不能解决OP所具有的错误。 – epascarello

0

这是使用jQuery的答案。希望这个对你有帮助!我已经分开了监听器和函数,因为我相信这会让事情稍后更容易编辑。你可以将它们合并来缩短代码。

//Listener for the checkbox 
 
$("input[name='choice']").change(function() { 
 
    sumUp(); 
 
}); 
 

 

 
//Funtion that adds the total up 
 
function sumUp() { 
 
    var sum = 0; 
 

 
    $(" input[name='choice']:checked").each(function() { 
 
    sum += parseInt($(this).val()); 
 
    }); 
 

 
    $("input[name=total]").val(sum); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="listForm"> 
 
    <input type="checkbox" name="choice" value="2" />2 
 
    <br/> 
 
    <input type="checkbox" name="choice" value="5" />5 
 
    <br/> 
 
    <input type="checkbox" name="choice" value="10" />10 
 
    <br/> 
 
    <input type="checkbox" name="choice" value="20" />20 
 
    <br/> Total: 
 
    <input type="text" size="2" name="total" value="0" /> 
 
</form>

+0

对不起。你怎么知道哪些复选框要总结。我没有看到你的代码中的复选框的名称。我的复选框也在数组中。 items [] –

+0

此代码的作用是获取所有选中的复选框的值并将其添加。每次选中/取消选中时,它都会运行。看起来像其他答案使用'阵列'所以看看这些!我给你的解决方案没有。这是客户端脚本,所以如果你想要服务器上的总和(对于数据库等),你需要通过'ajax'传递给PHP或者作为表单提交,然后在服务器上计算。 – blackandorangecat

+0

实际上,您应该选中复选框来计算总和,而不是页面上的所有复选框。 – epascarello