GORAGOD.com

คำนวณค่าที่เลือกโดย checkbox

มีคำถามจากบอร์ดเกี่ยวกับการคำนวณค่าโดยการเลือกจาก checkbox ผมเลยเอามาตอบบน how to แทน เผื่อมีคนสนใจ

<form name="frm">
<p><input type="checkbox" value="1" onclick="tick(frm)" /> 1</p>
<p><input type="checkbox" value="2" onclick="tick(frm)" /> 2</p>
<p><input type="checkbox" value="3" onclick="tick(frm)" /> 3</p>
<p><input type="checkbox" value="4" onclick="tick(frm)" /> 4</p>
<input type="text" name="sum" value="0" />
</form>
<script type="text/javascript">
function tick( frm )
{
  var sum=0;
  for (var i = 0; i < frm.elements.length; i++) {
    var chk = frm.elements[i];
    if ( chk.type == 'checkbox' && chk.checked )
    {
      sum += parseFloat( chk.value );
    };
  };
  frm.sum.value = sum;
}
</script>

แบบแรก ผมว่าแบบนี้เป็นแบบทั่วๆไป คำนวณและแสดงผลภายใน textbox จากค่าที่เลือกโดย checkbox

<form name="frm">
<p><input type="checkbox" value="1" onclick="tick(frm , this)" /> 1</p>
<p><input type="checkbox" value="2" onclick="tick(frm , this)" checked="checked" /> 2</p>
<p><input type="checkbox" value="3" onclick="tick(frm , this)" /> 3</p>
<p><input type="checkbox" value="4" onclick="tick(frm , this)" checked="checked"  /> 4</p>
<input type="text" name="sum" value="100" />
</form>
<script type="text/javascript">
function tick( frm , chk )
{
  // คำนวณบวกหรือลบจากค่าเริ่มต้น
  var sum = parseFloat( frm.sum.value );
  frm.sum.value = chk.checked ? sum + parseFloat(  chk.value ) : sum - parseFloat( chk.value );
}
</script> 

แบบนี้จะพิเศษหน่อย อีตรงที่มีค้าเริ่มต้นใน textbox รวมถึงมีค่าเริ่มต้นใน checkbox ด้วย เงื่อนไขของฟอร์มแบบนี้ก็คือ บวกค่า chekbox ที่เลือกเข้ากับค่าเดิมใน text เมือ checked และ ลบค่าใน text ออก เมื่อ unchecked