如何通过使用正则表达式更改值来获取单选按钮值的总和?

时间:2014-09-04 19:22:31

标签: javascript jquery html regex radio-button

我想添加点击的所有单选按钮的值,但我得到的数字不正确。

<div id="config">
    <input type="radio" name="brand" id="dell" value="Dell $1500"> Dell
    <input type="radio" name="brand" id="mackbookpro" value="MacbookPro $3000"> Macbook Pro
    <input type="radio" name="brand" id="asus" value="Asus $2000"> Asus

    <input type="radio" name="ram" id="4gb" value="4 Gb $60"> 4 GB RAM
    <input type="radio" name="ram" id="8gb" value="4 Gb $90"> 8 GB RAM
    <input type="radio" name="ram" id="16gb" value="4 Gb $125"> 16 GB RAM

    <input type="radio" name="storage" id="250gb" value="250 Gb $100"> 250 Gb Storage
    <input type="radio" name="storage" id="500gb" value="500 Gb $200"> 500 Gb Storage
    <input type="radio" name="storage" id="900gb" value="900 Gb $300"> 900 Gb Storage
</div>

<div id="show">0</div>

jQuery看起来像这样

var displayPrice = document.getElementById('show');

$("#config input[type=radio]").click(function() {
    var total = 0;
    $("#config input[type=radio]:checked").each(function() {
        var checked = $(this).val();
        var checkNum = checked.split('$')[1];
        total += parseFloat(checkNum);
    });
    displayPrice.innerHTML = total;
});

我得到的数学并没有正确加起来。有什么我做错了吗?

3 个答案:

答案 0 :(得分:0)

我调整了一下,似乎工作正常:

$("#config").click("input[type=radio]",function() {
    var total = 0;

    $(this).parent().find('input[type=radio]').each(function() {
        var self = this;

        if(self.checked){
            total += parseFloat(self.value.split('$')[1]);
        }
    });

    alert(total);
});

Here is a jsFiddle for it

答案 1 :(得分:0)

在数字dediPrice中添加字符串total会产生一个字符串。

确保它可以将dediPrice转换为数字:

var dediPrice = parseFloat(document.getElementById('show').innerHTML);

请参阅小提琴:http://jsfiddle.net/66f4ay9L/1/

答案 2 :(得分:0)

您的代码运行正常。数学完美地加起来。只是一些建议:

  1. 更改而非点击活动
  2. this.value 而不是 $(this).val()
  3. + checked.split('$')并取消 parseFloat
  4. DEMO

    $(function() {
        var displayPrice = $('#show')[0];
        $("#config input[type=radio]").on('change',function() {
            var total = 0;
            $("#config input[type=radio]:checked").each(function() {
                var checked = this.value;
                var checkNum = +checked.split('$')[1];
                total += checkNum;
            });
            displayPrice.innerHTML = total;
        });
    });