Javascript else if语句不起作用

时间:2017-01-09 14:37:22

标签: javascript html

我正在上学的网站,我需要制作一个购物车。当我检查所要求的数量是否比可用数量更大时,即使不是,也会返回true。例如,3> 12是真的,我得到错误信息。 我拼错了“可用”..我知道:( 这是我的功能:

function add_to_cart() {

   jQuery ('#modal_errors').html("");

   var size = jQuery('#size').val();
   var quantity = jQuery('#quantity').val();
   var avaliable = jQuery('#avaliable').val();
   var error = '';
   var data = jQuery('#add_product_form').serialize();

   if( size == '' || quantity == '' || quantity == 0 ){
      error +='<p class = "text-danger text-center">You need to select a size and quantity.</p>';
      jQuery('#modal_errors').html(error);
      return;
  }
  else if(quantity > avaliable){
      error +='<p class = "text-danger text-center">There are only '+avaliable+' avaliable and you asked for '+quantity+'.</p>';
      jQuery('#modal_errors').html(error);
      return;
  }
}

这将返回消息(对于我的情况):“只有12个可用,你要求3。

这可能是一个noob错误,但我无法弄明白。有什么帮助吗?

修改 - &gt;&gt;

使用

var quantity = Number.parseInt(jQuery('#quantity').val());
var avaliable = Number.parseInt(jQuery('#avaliable').val());

它有效,但现在再次进入雾中:D

我得到像这样的值

    <div class="form-group">
                <div class="col-xs-3"><label for="quantity">Quantity:</label>
                  <input type="number" class="form-control" id="quantity" name="quantity" min="0"></div><br><div class="col-xs-9">&nbsp;</div>
              </div>

输入类型是数字我假设我不需要从字符串转换为数字。 输入类型编号=不是可以比较或乘法的实际数字或其他什么?

感谢您的回答:)

2 个答案:

答案 0 :(得分:7)

因为您的quantityavaliable是字符串,而不是数字。比较是通过字符串进行的。

尝试

var quantity = Number.parseInt(jQuery('#quantity').val());
var avaliable = Number.parseInt(jQuery('#avaliable').val());

<强>被修改

或者你只能在条件中进行解析,如果你想将它们用作字符串

else if(Number.parseInt(quantity) > Number.parseInt(avaliable)){

}

答案 1 :(得分:0)

如其他地方所述,您需要将字符串转换为数字,但是一旦执行此操作,您需要检查它们是否已成功转换为数字,尤其是在您检查字符串不为空时。 isNaN在这里是一个有用的功能。您可以检查字符串,然后检查数字,例如:

function add_to_cart() {
    var error = "";

    var size = jQuery('#size').val();
    var quantity = jQuery('#quantity').val();
    var avaliable = jQuery('#avaliable').val();

    if (size === '' || quantity === '' || avaliable === '' ) {
        error += '<p class = "text-danger text-center">You need to select a size and quantity.</p>';
    } else {
        var sizeNum = Number.parseInt(size),
            quantityNum = Number.parseInt(quantity),
            avaliable = Number.parseInt( avaliable );

        if ( isNaN( quantityNum ) || quantityNum === 0 || isNaN( sizeNum ) || sizeNum === 0 ) {
            error += '<p class = "text-danger text-center">You need to select a size and quantity.</p>';
        }
        else if ( quantityNum > avaliableNum ) {
            error += '<p class = "text-danger text-center">There are only ' + avaliable + ' avaliable and you asked for ' + quantity + '.</p>';
        }
    }

    jQuery('#modal_errors').html(error);
}