inputイベントのブラウザの対応が意外と進んでいる?
- inputイベントはWeb Forms 2.0の草案で定義されているイベントで、フォームコントロールに入力されている値がユーザの入力によって変更されたときに発生するイベント
- changeイベントと違ってフォーカスが外れることがイベント発生条件ではない
- キャレットを動かしただけ、などの場合は入力による変更がないのでイベントは発生しない
- キーボード入力だけが対象というわけではないのでコピー&ペーストやドラッグ&ドロップなどで入力がされた場合でもイベントが発生する、かもしれない
- テキスト入力欄上であれば、試した限りではFirefox(2.0.0.14 - 3 beta 5), Opera(9.0 - 9.5 beta 2), Safari(3.1) (windows)で一応使える
テスト
<!DOCTYPE html> <html><head><title>input event test</title> <script type="text/javascript"> function log(value){ var count = document.getElementById("count"); count.firstChild.data = +count.firstChild.data + 1; var log = document.getElementById("log"); var logtext = (log.firstChild || log.appendChild(document.createTextNode(""))); logtext.data += value + "\n"; } </script></head><body> <h1>input event test</h1> <p>Input: <input type="text" oninput="log(value)"></p> <p>Count: <span id="count">0</span></p> <pre id="log"></pre> </body></html>
- DOM Eventsの
target.addEventListener("input", ...);
でも可 - このテストの場合、IEでは
onpropertychange="if (event.propertyName=='value') log(value)"
などとして擬似的な対応が出来る、かもしれない