使い始めまし$('#myInput').bind('input', function() {
たが、これは IE で動作しません。
ユーザーがテキスト入力フィールドにコピーして貼り付けた場合を含め、テキスト入力フィールドへの変更を検出するための最適なクロスブラウザー ソリューションは何ですか?
使い始めまし$('#myInput').bind('input', function() {
たが、これは IE で動作しません。
ユーザーがテキスト入力フィールドにコピーして貼り付けた場合を含め、テキスト入力フィールドへの変更を検出するための最適なクロスブラウザー ソリューションは何ですか?
彼らはブス。不要。事実上すべての人に嫌われています。しかし、IEでのユーザー入力をテストする数少ない最も回復力のある方法の1つです。
理由:
.on('input', function(){})
IE <9ではサポートされておらず、IE9-10ではバグがあります。文字が削除されても起動しません。keyup
完璧にはほど遠いので、右クリックメニューとツールバーから貼り付けることができます。paste
私が覚えている限り、このイベントはIE6以降十分にサポートされていますが、値を入力する方法はキーボード入力と貼り付けだけではありません。入力内のテキストを選択、ドラッグアンドドロップすることもできます。これが、IEサポートを実装するときに間隔が優先される理由の1つです。IEでは、フォールバックとして使用することもできますがonpropertychange
、オブジェクトプロパティが変更されるたびに起動されるため、Intervalの場合と同様の「値が変更された」検証を実行する必要があります。したがって、すべてのブラウザー用にコードを記述し、IE用に別のコードを記述するよりも、すべてのブラウザーで機能する単一の間隔を記述したいと思います。
したがって、私の提案する解決策は次のとおりです。
次のように間隔を使用します。
$(function() {
var input = $('#foo'); //change this selector to your input
function checkchange() {
var v = input.val();
if (input.data('v') === v) return;
input.data('v', v);
//do stuff
}
input.data('v', input.val());
setInterval(checkchange, 100);
});
または2.GCFをモーダルに配置し、Xボタンを非表示にします。これにより、IEユーザーにGCFをインストールさせることができ、IE固有のコードを再度記述する必要がなくなります。可能な限りこれを行います。繰り返しになりますが、私のターゲットオーディエンスには通常IEユーザーは含まれていません。