将两个下拉值相乘会导致NaN具有一个值

时间:2016-10-17 11:23:18

标签: javascript jquery

  1. 我有一个简单的功能,可以监控' 更改'在两个下拉字段中,然后将两个值相乘以显示使用表单时实时更新的总和。

  2. 使用bootstrap selectpicker - 没有默认选择,因此在下拉字段中进行选择之前没有值。

  3. 当进行第一次下拉选择时,将检测到更改并将值与非值相乘。从而产生NaN输出。

  4. 如何在选择了两个下拉字段后输出总数?

    JSFiddle example here.

    <label>Group Size</label>
    <select class="selectpicker group calculate" id="group" name="group" data-rule-required="true" title="Choose Group Size...">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </select>
    
    <label>Price</label>
    <select class="selectpicker price calculate" id="price" name="price" data-rule-required="true" title="Choose Price...">
    <option value="10">Option A: $10</option>
    <option value="20">Option B: $20</option>
    <option value="30">Option B: $30</option>
    </select>
    
    <label>Total Sum:</label>
    <input name='total' id='total' disabled='true' data='' />
    
    $('.calculate').change(function(){
        var group = parseInt($('.selectpicker.group').val());
        var price = parseInt($('.selectpicker.price').val());
        var total = group * price;
        $('#total').val('$' + total);
    });
    

    NaN错误:

    NaN Error

8 个答案:

答案 0 :(得分:4)

if(isNaN(total)){ $('#total').val(''); } else{ $('#total').val('$' + total); } 使用if / else语句:

if()

使用<option></option>语句可能很诱人,但如果您以后使用else,则会导致意外结果。如果值不是数字,最好使用Counter清空输入。

答案 1 :(得分:3)

只需检查您的值是否已选中或是否为数字

if(isNaN(total)==false )
{
    $('#total').val('$' + total);
}

DEMO

答案 2 :(得分:3)

试试这个:

for (var j = 0; j < 3; j++) {

                StretchData.getById(item)
                .then(function (data) {
                    alert(startWorkOutModel.sortValue);
                    startWorkOutModel.inStretchedData = {
                        sort: startWorkOutModel.sortValue,
                        sData: data.result
                    }
                    startWorkOutModel.stretchedData.push(startWorkOutModel.inStretchedData);
                    fl = true;
                    console.log(JSON.stringify(startWorkOutModel.stretchedData));
                    // break;

                },
                function (error) {
                    alert(JSON.stringify(error));
                });                            

      }

答案 3 :(得分:2)

将您的javascript写为

    $('.calculate').change(function(){
    var group = parseInt($('.selectpicker.group').val());
   var price = parseInt($('.selectpicker.price').val());
   var total = group * price;
   //Check if total is not a number
   if(!isNaN(total)) {
  $('#total').val('$' + total);
   }    
});

答案 4 :(得分:1)

这是因为当您更改组的第一个下拉列表时,第二个下拉列表的值会给出NaN值,这就是您获得NaN的原因。如果两个下拉列表都被选中,那么你应该保持验证,然后再乘以它。

答案 5 :(得分:1)

这是一个选择列表。您需要将选择列表作为选择列表进行访问。

$('.calculate').change(function(){
    var selectgroup = $('.selectpicker.group').get(0);
    var selectprice = $('.selectpicker.price').get(0);

    var total = parseInt(selectgroup.options[selectgroup.selectedIndex].value) * parseInt(selectprice.options[selectprice.selectedIndex].value);
    $('#total').val('$' + total);
});

这完全胜过我为什么jQuery不会选择选择类型来获得它的价值。

答案 6 :(得分:1)

试试这个。

$('.calculate').change(function () {
    if (Number($('.selectpicker.group').val()) && Number($('.selectpicker.price').val())) {
        var total = Number($('.selectpicker.group').val()) * Number($('.selectpicker.price').val());
        $('#total').val('$' + total);
    } else {
        return;
    }
});

<强> Fiddle Here.

答案 7 :(得分:0)

尝试验证两者:

<p id="test"></p>
<script>
var text="Hi I am Anonymous";
if text.IndexOf("Hi") {
document.getElementById("test").innerHTML = "Hey Anonymous";
return;
}//Sorry for the bad intending
</script>