【问题标题】:Sum dynamic values from input text and radio对输入文本和单选的动态值求和
【发布时间】:2014-05-20 19:34:11
【问题描述】:

我正在尝试将动态变化的输入文本的值与也动态变化的收音机相加。我在做正确的事情,但也做错了事情,因为它不会在我想要的时候求和。 总和应该在每次输入文本更改时显示,而不是在您单击单选时随机消失,只需对它们求和即可。

小提琴http://jsfiddle.net/7tFhx/

和代码

<form id="myForm" accept-charset="UTF-8">
    <button type="button" class="btn-tt btn-primary btn-lg" disabled>1. Elige el color</button></br>
        <label>
            <input class="calc" id="fb1" type="radio" name="fb" value="10">
            <img src="img/01.jpg"/>
        </label>            
        <label>
            <input class="calc" id="fb2" type="radio" name="fb" value="15">
            <img src="img/02.jpg"/>
        </label>
    </br>
    </br>
    <button type="button" class="btn-tt btn-primary btn-lg" disabled>2. Elige las medidas</button></br>
    <div class="row">
        <div class="col-xs-2">
            ancho (cm.)
            <input id="ancho" type="text" class="form-control" placeholder="100">
        </div>
        <div class="col-xs-2">
            alto (cm.)
            <input id="alto" type="text" class="form-control" placeholder="100">
        </div>      
        <div class="col-xs-2">
            cantidad
            <input id="cantidad" type="text" class="form-control" placeholder="1">
        </div>
    </div>
    </br>
    <button type="button" class="btn-tt btn-primary btn-lg" disabled>3. Posición mecanismo</button></br>
        <label>
            <input class="calc" id="fb3" type="radio" name="fb1" value="20">
            <img src="img/01.jpg"/>
        </label>            
        <label>
            <input class="calc" id="fb4" type="radio" name="fb1" value="35">
            <img src="img/02.jpg"/>
        </label>

    <div>
        Total: <span id="price">0</span>€
    </div>
</form>

js:

$(function(){    

var mecanismoMedida = ['100','200'];
var mecanismoPrecio = ['50','80'];

$('#ancho').on('input',function(){
var j = 1, i = 0;
value = parseInt(($("#ancho").val() / 8) + 1);

for(i = 0; i < mecanismoMedida.length; i++){
    if($("#ancho").val() >= mecanismoMedida[i] && $("#ancho").val() < 
mecanismoMedida[j]){
        value += mecanismoPrecio[i];
        break;
    } else {
        j++;
    }
}

$("#price").text(this.value + value);
});

$('#myForm input[type="radio"]').on('change', function () {
    var sum = 0;
    $("#myForm").find("input[type='radio']:checked").each(function () {
        sum += parseInt(this.value);
    });
    $("#price").text(sum);
});
});

【问题讨论】:

  • 我完全不确定你在总结什么。在第一个框中输入 1 会导致 11,11 会导致 11250,111 会导致 1111450。应该发生什么?
  • 如果你将文本框的值(你设置 80 所以 80/8+1)加上单选值加上 #price 的值应该动态变化
  • 你在找东西吗like this?
  • @David 就是这样,但是第二台收音机坏了!
  • 它对我有用。第一个值为 10,第二个值为 15,对吧?

标签: javascript jquery html text radio


【解决方案1】:

如果你想要的是一个简单的求和,你可以简单地在 keyup 上运行更新代码并更改所有输入元素的事件:

$("input").change(function(){update();}).keyup(function(){update();});

要更新它们,首先您需要检查并查看两个单选按钮中的哪一个被选中并获取其值:

function update(){

    var p = 0;
    for(var i = 0; i < $(".calc").val(); i++)
    {
        if($($(".calc")[i]).prop("checked") == true)
        {
            p += parseInt($($(".calc")[i]).val());
        }
    }

之后,只需将文本框的值解析为整数并将它们添加到单选按钮的值中。我创建了一个自定义函数来执行此操作,因为如果框为空,则解析它们会返回 NaN:

    p = parseInt(p);

    p += parseInt(val2($("#ancho")));
    p += parseInt(val2($("#alto")));
    p += parseInt(val2($("#cantidad")));

    p = parseInt(p);

    $("#price").html(p);
}

function val2(elm){
    if(isNaN(parseInt($(elm).val())))
       return 0;
    else
        return parseInt($(elm).val());
}

JSFiddle

【讨论】:

  • 正是我想做的,非常感谢。我学到了一些新东西!
  • @user3506043 没问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多