0

私はhtml入力を持っています、

<input type="text" id="txtCheckoutBCode" name="barcode" class="sfInputbox" />

今、バーコードリーダーがバーコードを読み取り、バーコードがテキストフィールドの上に反映されている間に、いくつかの ajax 呼び出しを実行したいと考えています。

次のコードを試しましたが、

$('#txtCheckoutBCode').on('change', function() {
    var me= $(this);
    var number = 0;
    number = $.trim(me.val());                        
    if (number.length == 12) { // 12 coz my barcode is of length 12
        //ajaxcall method
    }
});

ただし、フォーカスが入力フィールドから変更された場合にのみ発生します。また 、

 $('#txtCheckoutBCode').on('keyup', function() {
     var me= $(this);
     var number = 0;
     number = $.trim(me.val());                        
     if (number.length == 12) { //12 coz my barcode is of length 12
         //ajax call method
     }
 });

これにより ajax 呼び出しが 2 回発生しますが、私はこれを好みません。

入力フィールドにバーコードが入力されたらすぐに ajax コードを呼び出す必要があります。しかし、2回ではありません。

4

2 に答える 2

1

まず、入力とのやり取り (貼り付けなど) を確実に検出するために、propertychange keyup input paste代わりにを使用する必要があります。keyupただし、特に Firefox では、イベントが 2 回トリガーされる可能性があります。のみを使用することをお勧めしkeyup pasteます。

change、あなたが言ったように、入力がフォーカスを失うとトリガーされます。 keyupキーを押すたびにトリガーされます。

ajax 呼び出しを 1 回だけ実行する場合は、stopImmediatePropagation()を使用してみてください。

$('#txtCheckoutBCode').on('keyup paste', function(e) {
    e.stopImmediatePropagation();
    var me= $(this);
    var number = 0;
    number = $.trim(me.val());                        
    if (number.length == 12) { // 12 coz my barcode is of length 12
        //ajaxcall method
    }
});

http://jsfiddle.net/fC5yh/

于 2013-11-08T10:18:08.907 に答える