1

請求書フォームと jquery 関数があります。請求書で、利用可能な数量を超える数量を入力すると、ユーザーに警告する必要があります。

私の問題は次のとおりです。最大数量を 5 にします。データを 7 (1 桁 > 最大利用可能数量) として入力すると、コードは正常に動作します。しかし、2つのデジギスト番号を入力すると、たとえば. 17 (2 桁 > 最大利用可能数量) の場合、アラート ボックスが表示されません。onkeyup というのは、関数が 1 桁でしか機能していないということです。

どうすればそれを実現できますか?助けてください。

      $('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 > cq2つの文字列を比較していますが、これはあなたが望むものではありません. これらの文字列の数値を比較しようとしています。

代わりにこれを使用してください:

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

値はstringとして比較されます。Numbers を比較する場合は、次のいずれかを使用します。

parseInt()またparseFloat()

また

[..].val() * 1、ただし、数字がない場合は「NaN」を返しますが、parseInt() と parseFloat() は 0 を返します。

于 2012-11-26T15:50:31.090 に答える
0

parseInt()文字列ではなく整数を比較していることを確認するために使用する必要があります。

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