4

まず第一に、私はこれが以前に尋ねられたことを知っます 。jQueryのような一般的なライブラリのより最近のバージョンがこれを解決したことを期待してもう一度お願いします。これは希望的観測かもしれません、私は知っています...

<input>そうは言っても、まだすべての変更(キーを押す、貼り付ける、自動修正)を検出する方法はありますか?$("#myElement").bind('input propertychange', function (e) {...});IE9が登場して壊れるまで使用していました(バックスペース/カット/削除では起動しません)。

私が知っている3つのオプションがありますが、すべてに欠点があります。

  1. さらに多くのイベント(キーアップ、貼り付けなど)にバインドし、setTimeout重複を無視するために使用します。
  2. ブラウザの検出に基づいて特定のイベントにバインドします。
  3. さらに多くのイベントにバインドし、jQuery.data()で古い値を追跡し、ハンドラーを起動する前にそれと比較します(この回答のように)。

「より良い方法」がまだない場合、上記のどれを好みますか、そしてその理由は何ですか?

4

4 に答える 4

2

をサポートしていないブラウザのフォールバックとして、フィールドでイベントとイベントのoninput両方を使用できますが、イベントハンドラをデバウンスして、複数の実行を防止します。onkeyuponinput

$('input').on('keyup input', debounce(function() {
  // do something
  console.log('input'):
}, 500));

var debounce = function(func, wait, immediate) {
    var timeout;
    return function () {
        var context = this, args = arguments;
        var later = function () {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};
于 2015-06-02T14:23:59.433 に答える
0

これを試して:

<input type="text" onchange="$(this).trigger('change');">

それが機能する場合は、バグのあるブラウザを条件付きで使用.attr('onchange', '...')して、マークアップがハッキングで乱雑にならないようにすることができます。

<script>
    <!--[if lte IE 9]>
        $('input[type=text]').attr('onchange', '$(this).trigger(\'change\')');
    <![endif]-->
</script>
于 2013-02-28T22:01:11.800 に答える
0

keypressイベントを試すことができます。ただし、blurイベントを使用します。

これに関するちょっとした哲学:私が直感的で煩わしいカウンターを入力しているときに、テキストボックスが何らかの形や形でテキストを変更することがわかりました。

もちろん、たとえば3フィールドのSSNの場合、長さをチェックして次のフィールドにシュートする必要がありますが、それ以外の.blur()場合はすべてです。

于 2013-02-28T21:42:30.017 に答える
0

最新のブラウザのみをサポートしている場合は、はい、単一のイベントのみを使用してクロスブラウザでサポートする方法があります。input

$(myelement).on('input',function(){
    console.log(this.value);
});

古いブラウザのサポートを継続したい場合は、古いバージョンのブラウザが修正されないため、それらの回避策を引き続き使用する必要があります。

キーダウンは入力イベントがトリガーされるのとほぼ同時にトリガーされるため、キーダウンと入力をペアにすることを好みます。

于 2013-02-28T21:45:24.300 に答える