1

我有一个发票表格和一个 jquery 函数。在发票中,如果我输入的数量大于可用数量,那么我必须提醒用户。

我的问题是:让最大数量为 5,如果我输入数据为 7(一位数>最大可用数量),那么我的代码工作正常。但是,如果我输入两个 digigist 号码,例如。17(两个digists>最大可用数量)然后我的警报框没有出现。我的意思是 onkeyup 我的功能仅适用于单个数字。

我怎样才能让它发生?请帮忙。

      $('input[name="quantity"]').keyup(function() 
       {  
    //problem is here
        var $tr = $(this).closest("tr");
        var unitprice = $tr.find('input[name^="unitprice"]').val();

        var q = $tr.find('input[name^="quantity"]').val();
        var cq = $tr.find('input[name^="checkquantity"]').val();

        if(q>cq)
      {
      alert("Error: Quantity value exceeds then available quantity..Max Quantity is "+cq);
          //this works fine only if single digit is entered in textbox quantity
       }

         //----below are some other stuffs -these are working fine
        $tr.find('input[name^="sprice"]').val($(this).val() * unitprice); 
        var totalPrice = 0;
        $('input[name="sprice"]').each(function()
        {
            totalPrice += parseFloat(this.value);
            $('[name=subtotal]').val(totalPrice);
        });  
    });  
    --------------
    ------------
   // Form containing the above textboxes
        <input type="submit" id="submitbtnId" value="Save"/>`
4

3 回答 3

1

q > cq正在比较 2 个字符串,这不是您想要的。您正在尝试比较这些字符串的数值。

改用这个:

if ( +q > +cq)
{
    // alert your error
}

请注意,通过在变量前面加上+符号,您将它们转换为数字。


更好的是,在获得值后立即将它们转换为数字:

var $tr = $(this).closest("tr");
var unitprice = +$tr.find('input[name^="unitprice"]').val();

var q = +$tr.find('input[name^="quantity"]').val();
var cq = +$tr.find('input[name^="checkquantity"]').val();

if ( q > cq )
{
    alert("Error: Quantity value exceeds then available quantity..Max Quantity is " + cq);
}
于 2012-11-26T15:49:41.690 回答
0

您需要使用parseInt()以确保您比较的是整数,而不是字符串:

if (parseInt(q, 10) > parseInt(cq, 10)) {
    /* Rest of your code */
}
于 2012-11-26T15:49:33.133 回答
0

您的值被比较为string。如果要比较数字,请使用:

parseInt()或者parseFloat()

或者

[..].val() * 1,但如果没有数字,这将返回“NaN”,而 parseInt() 和 parseFloat() 将返回 0

于 2012-11-26T15:50:31.090 回答