1

入力フィールドの実際の変更ごとに1イベントハンドラーをトリガーしたいと思います。たとえば、クレジットカード番号の入力を(キーを押すごとに)検証するには(変更は変更で行われる必要があるため、デバウンス/スロットリングは答えではありません)。

inputIE9はバックスペースからこのイベントをトリガーしたり、切り取り/削除したりしないため、単独で使用することはできません。

keyupマウスからの変更(貼り付けなど)を処理できないため、単独では使用できません。

changeこれはでのみ発生するため、使用できませんblur

私はできます$('input').bind('input keyup', handler)が、これはほとんどの場合2つの別々のイベントを発生させます。ハンドラーは高価であり、2回実行することは許容できないと想定します。

現在の値が最後にチェックされた値と異なる場合にのみ実行されるようにハンドラーをラップできますが、より良い方法はありますか?

4

5 に答える 5

5

最後の入力をチェックすることであなたがしていることはあなたがしなければならないことです。

これは、最後の値を保存するために実行できる1つの方法です。

function handler(){ 
    var tb = jQuery(this);
    var currentValue = tb.val();
    if (tb.data("lastInput") !== currentValue) {
        tb.data("lastInput", currentValue);
        console.log("The current value is " + currentValue);
    } 
}
$('input').bind('input keyup', handler);

jsFiddle

関数にそのロジックが本当に必要ない場合は、いつでもjQueryを拡張できます。これはさらに多くのコードですが、1つの方法です。

(function(){
    $.fn.oneinput = function(callback) {        
        function testInput(){ 
            var tb = jQuery(this);
            var currentValue = tb.val();
            if (tb.data("lastInput") !== currentValue ) {
                tb.data("lastInput",currentValue );
                if(callback) { 
                    callback.call(this) 
                };
            }
            return this;
        }    
        jQuery(this).bind("keyup input", testInput);
    };
}(jQuery));

$('input').oneinput( function(){ console.log(this.value); });
​

jsfiddle

于 2012-09-28T13:04:11.390 に答える
0

これを試して

    $('input').bind('keyup cut paste', function (event) {
         console.log('value changed');
    });

フィドルhttp://jsfiddle.net/sXvK2/1/

于 2012-09-28T12:52:30.893 に答える
0

ハンドラーが値を返す必要がない場合はreturn false、2回目に起動しないようにハンドラーを作成できます。

于 2012-09-28T12:37:33.877 に答える
0

setIntervalテキストボックスの変更を監視するために使用する必要があると思います

このデモをお試しください

objTextBox = document.getElementById("trackChange");
oldValue = objTextBox.value;

console.log(oldValue);

function track_change()
   {
     if(objTextBox.value != oldValue)
     {
       oldValue = objTextBox.value;
       console.log("changed")
     }

   }

setInterval(function() { track_change()}, 100);

注:私は個人的にこれが最善の解決策だとは思いませんが、より良い解決策を見つけることはできず、キーボードやマウスを変更するたびに確実に機能します;)

于 2012-09-28T12:45:21.953 に答える
-3

どうですか

$el.bind('input', handler);
$el.bind('keyup', handler);
...
于 2012-09-28T12:19:51.603 に答える