change
イベントとinput
イベントの違いを教えてください。
私はそれらを追加するためにjQueryを使用しています:
$('input[type="text"]').on('change', function() {
alert($(this).val());
})
input
の代わりにchange
でも動作します。
フォーカスに関連するイベントの順序に何か違いがあるのでしょうか?
この投稿 によると:
oninput
イベントは、ユーザーインターフェイスを介して要素のテキストコンテンツが変更されたときに発生します。
onchange
は、選択、チェック状態、または要素の内容が変更されたときに発生します。場合によっては、要素がフォーカスを失ったときにのみ発生します。 onchange属性は、<input>
、<select>
、および<textarea>
で使用できます。
TL; DR:
oninput
:テキストの内容に加えられた変更onchange
:<input />
の場合:変更+フォーカスを失う<select>
:変更オプションの場合$("input, select").on("input", function () {
$("pre").prepend("\nOn input. | " + this.tagName);
}).on("change", function () {
$("pre").prepend("\nOn change | " + this.tagName);
}).on("focus", function () {
$("pre").prepend("\nOn focus | " + this.tagName);
}).on("blur", function () {
$("pre").prepend("\nOn blur | " + this.tagName);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<select>
<option>Alice</option>
<option>Bob</option>
<option>Carol</option>
<option>Dave</option>
<option>Emma</option>
</select>
<pre></pre>
change
event
は、コンテンツが変更され、エレメントがfocus
を失うと、ほとんどのブラウザーで起動します。基本的には変更の集合です。 input
event
の場合のように、すべての変更に対して起動するわけではありません。
input
event
は、要素のコンテンツが変更されると同期して起動します。そのため、イベントリスナーはより頻繁に起動する傾向があります。
さまざまなブラウザーは、特定のタイプの対話に対して変更イベントを起動する必要があるかどうかに必ずしも同意しません。
MDNドキュメントには明確な説明があります(いつ追加されたかはわかりません):
ユーザーが要素の値の変更をコミットすると、
input
、select
、およびtextarea
の各要素に対してchangeイベントが発生します。 入力イベントとは異なり、変更イベントは、要素の値が変更されるたびに発生するわけではありません。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event