2011-06-13 104 views
0

共计我想基于从复选框中选择选项来创建一个页面总。计算复选框使用jQuery

这里是我的HTML标记:

<input type="checkbox" id="option1" name="option1" value="<?= $add[0] ?>" />t1 + &pound;<?= $add[0] ?><br /> 
<input type="checkbox" id="option2" name="option2" value="<?= $add[1] ?>" /t2 + &pound;<?= $add[1] ?><br /> 
<input type="checkbox" id="option3" name="option3" value="<?= $add[2] ?>" />t3 + &pound;<?= $add[2] ?><br /> 
<input type="checkbox" id="option4" name="option4" value="<?= $add[3] ?>" />t4 + &pound;<?= $add[3] ?> <br /> 

这是我的JavaScript不起作用:

var option1 = 0; 
var option2 = 0; 
var option3 = 0; 
var option4 = 0; 
var op = 0; 

var extra = document.getElementById('extra'); 

$(":input").change(function() 
{ 

    option1 = $("input[name=option1]:checked").attr("value"); 
    option2 = $("input[name=option2]:checked").attr("value"); 
    option3 = $("input[name=option3]:checked").attr("value"); 
    option4 = $("input[name=option4]:checked").attr("value"); 

    op = parseInt(option1) + parseInt(option2) + parseInt(option3) + parseInt(option4) ; 

    extra.innerHTML = '<p>&pound;'+op+'</p>'; 
}); 

难道我错了地方? 我有其他总计工作,已经从脚本中删除,所以它更容易阅读,只是这一个不工作!

编辑:

<input id="option1" name="option1" value="20" type="checkbox">t1 + £20<br> 
<input id="option2" name="option2" value="20" type="checkbox">t2 + £20<br> 
<input id="option3" name="option3" value="20" type="checkbox">t3 + £20<br> 
<input id="option4" name="option4" value="20" type="checkbox">t4 + £20 <br> 

添加的无线:

<input id="delivery" name="delivery" value="0" checked="checked" type="radio"> Standard (72hrs) - no addtional charges<br> 
        <input id="delivery" name="delivery" value="200" type="radio"> 45hrs - £200 per email templates<br> 
        <input id="delivery" name="delivery" value="250" type="radio"> 24hrs - £250 per email templates<br> 
+1

定义不起作用?它会抛出一个错误吗?它是否把额外的东西?什么浏览器? – Patricia 2011-06-13 14:57:38

+0

添加了html输出 – Lunar 2011-06-13 15:04:35

+0

上述代码位于何处? '#extra'存在于DOM之后? – 2011-06-13 15:08:14

回答

3

这将是最简单的,如果你可以选择所有的复选框在一起(并确保你不抓住其他复选框你不想抢:

<div id="checkSet"> 
    <input type="checkbox" id="option1" name="option1" value="<?= $add[0] ?>" />t1 + &pound;<?= $add[0] ?><br /> 
    <input type="checkbox" id="option2" name="option2" value="<?= $add[1] ?>" /t2 + &pound;<?= $add[1] ?><br /> 
    <input type="checkbox" id="option3" name="option3" value="<?= $add[2] ?>" />t3 + &pound;<?= $add[2] ?><br /> 
    <input type="checkbox" id="option4" name="option4" value="<?= $add[3] ?>" />t4 + &pound;<?= $add[3] ?> <br /> 
</div> 

然后全部选中,并在它们之间迭代,总结自己的VALU ES:

var sum = 0; 
$('#checkSet :checked').each(function(){ 
    sum += parseInt($(this).val(), '10'); 
}); 
+0

这是优秀的,我怎么能修改此通过读取一组单选按钮的太更新总数是多少?见上面 – Lunar 2011-06-13 15:21:12

+0

所以我最后的SUM将是选定的收音机+ checkSet。谢谢 – Lunar 2011-06-13 15:23:05

+0

校长是一样的。在这种情况下,只需从收音机中获取值:$('[name =“delivery”]:checked')。val(),您可以将其添加到需要添加的任何内容中。 – kinakuta 2011-06-13 15:25:51

0

。在你的HTML错误:

<input type="checkbox" id="option2" name="option2" value="<?= $add[1] ?>" />t2 + &pound;<?= $add[1] ?><br /> 

然后,当你做parseInt函数它总是更好的指定基你解析:

parseInt(option1, '10') 

否则你可能有像09值奇怪的问题。

我可以看到生成的HTML输出?也许其中一个复选框的值不是数字,也不能被解析。 解析它会返回NaN,当您将这些值相加时,这会给您带来问题。

我用这个代码和作品,但当然也可以在小提琴写更好

var extra = document.getElementById('extra'); 

$(":input").change(function() 
{ 
    var option1; 
var option2; 
var option3; 
    var option4; 
    var op = 0; 
    option1 = $("input[name=option1]:checked").attr("value"); 
    option2 = $("input[name=option2]:checked").attr("value"); 
    option3 = $("input[name=option3]:checked").attr("value"); 
    option4 = $("input[name=option4]:checked").attr("value"); 

    if (option1){ 
     op += parseInt(option1, '10'); 
    } 
    if (option2){ 
     op += parseInt(option2, '10'); 
    } 
    if (option3){ 
     op += parseInt(option3, '10'); 
    } 
    if (option4){ 
     op += parseInt(option4, '10'); 
    } 
    if (op > 0){ 
     extra.innerHTML = '<p>&pound;'+op+'</p>'; 
    }else{ 
     extra.innerHTML = ''; 
    } 
}); 

here

+0

我已经添加了HTML输出,他们只是数字 – Lunar 2011-06-13 15:04:26

+0

@Lunar我添加了一些代码 – 2011-06-13 15:16:25