JavaScript を使用してテキストエリアの変更イベントを検出するにはどうすればよいでしょうか?
入力時に使用可能な残りの文字数を検出しようとしています。
onchange イベントを使用しようとしましたが、フォーカスが外れたときにのみ実行されるようです。
ベストアンサー1
クロスブラウザでこれを行う最良の方法は次のとおりです。の組み合わせを使用するinput
そしてonpropertychange
イベント、 そのようです:
var area = container.querySelector('textarea');
if (area.addEventListener) {
area.addEventListener('input', function() {
// event handling code for sane browsers
}, false);
} else if (area.attachEvent) {
area.attachEvent('onpropertychange', function() {
// IE-specific event handling code
});
}
イベントinput
ではIE9+、FF、Chrome、Opera、Safari、そしてonpropertychange
世話をするIE8(IE6 および 7 でも動作しますが、いくつかバグがあります)。
input
とを使用する利点は、(またはキーを押したときのように)onpropertychange
不必要に作動しないことです。Ctrl
Shift
テキストエリアの内容が変更されたときに比較的コストのかかる操作を実行したい場合は、これが最適な方法です。。
IEは相変わらず、これを中途半端にしかサポートしていません。IEinput
ではonpropertychange
、文字が削除されましたテキストエリアから。したがって、IE で文字の削除を処理する必要がある場合は、 を使用します( / をkeypress
使用するのではなく、ユーザーがキーを押して保持した場合でも 1 回しか実行されないため)。keyup
keydown
ソース:http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
編集:コメントで正しく指摘されているように、上記の解決策でさえ完璧ではないようです。addEventListener
テキストエリアにプロパティが存在すると、ない正常なブラウザで作業していることを意味します。同様に、attachEvent
プロパティの存在はないIEを暗示しています。コードを本当に完璧にしたい場合は、変更を検討する必要があります。ティム・ダウンのコメントポインタ用。