「入力」要素の「変更」イベントと「入力」イベントの違い


108

changeinputイベントの違いは誰か教えてもらえますか?

それらを追加するためにjQueryを使用しています:

$('input[type="text"]').on('change', function() {
    alert($(this).val());
})

input代わりにも動作しますchange

おそらく、フォーカスに対するイベントの順序に多少の違いがありますか?


rakshasingh.weebly.com/1/post/2012/12/… 古いブラウザではoninputがサポートされていないことに注意してください。回避策として、onchange、onpaste、onkeyupを使用できます。PS:IE9ではoninputイベントもバグが多く、削除時に発生しません。
A. Wolff

1
入力はキーを押した後などにより頻繁に発生しますが、変更は基本的に入力がぼやけており、値が入力にフォーカスがあったときの値とは異なる場合に発生します。
dandavis 2013年

inputイベントも貼り付けキャプチャします。stackoverflow.com/questions/15727324/…を
Antony

1
TLDR:入力時に発砲し、外側をクリックすると発砲を変更
Muhammad Umer

回答:


117

この投稿によると:

  • oninput イベントは、ユーザーインターフェイスを通じて要素のテキストコンテンツが変更されたときに発生します。

  • onchange選択、チェックされた状態、または要素の内容が変更されたときに発生します。場合によっては、要素がフォーカスを失ったとき、またはreturn(Enter)を押して値が変更されたときにのみ発生します。onchange属性を一緒に使用することができます<input><select><textarea>

TL; DR:

  • oninput:テキストコンテンツに加えられた変更
  • onchange
    • それが<input />:変更+フォーカスを失う
    • それが<select>:の場合、オプションを変更します

$("input, select").on("input", function () {
    $("pre").prepend("\nOn input. | " + this.tagName + " | " + this.value);
}).on("change", function () {
    $("pre").prepend("\nOn change | " + this.tagName + " | " + this.value);
}).on("focus", function () {
    $("pre").prepend("\nOn focus | " + this.tagName + " | " + this.value);
}).on("blur", function () {
    $("pre").prepend("\nOn blur | " + this.tagName + " | " + this.value);
});
<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>


7
この2つの違いはまだはっきりしていません。それらはあなたの説明から非常によく似ています。
Justin Morgan

10
@JustinMorgan JSFiddleの例のように、は、onchange「要素がフォーカスを失ったとき」にoninput発生し、テキストが変更されるたびに発生します。
IonicăBizău

1
違いは、oninputイベントは要素の値が変更された直後に発生し、onchangeは要素がフォーカスを失ったときにコンテンツが変更された後に発生することです。
NinoLopezWeb 2017

1
言い換えると、「入力」は、コントロールがフォーカスを失い、値が変更されたときにのみ発生する「変更」が評価されている間に、文字が変更、削除、または追加されるとすぐにトリガーされます
AdamMoszczyńskiOct

Chromeで試しました。onchangeフォーカスしているときにEnterキーを押したときにもトリガーされます。
リック

24
  • change event内容が変更され、要素が失われているほとんどのブラウザで火災focus。基本的には変更の集合です。ケースのように、すべての変更が発生するわけではありませんinput event

  • input event要素の内容の変化に同期し起動します。そのため、イベントリスナーはより頻繁に起動する傾向があります。

  • 異なるブラウザーは、特定のタイプの対話に対して変更イベントを発生させる必要があるかどうかに常に同意するとは限りません


入力イベントが同期して発生することが保証されているとは思いません。
Tim Down

また、すべてのブラウザの現在のバージョンがこのinputイベントをサポートしています。
Tim Down

2
@TimDown、それがブラウザのサポートが異なると私が言った理由です。誰もがすべてのブラウザの最新バージョンを持っているわけではありません。
ゲイブ

@TimDown同期して起動しますか?
Suraj Jain 2017

@SurajJain:正直なところ、よくわかりません。
Tim Down

1

MDNのドキュメントには明確な説明があります(いつ追加されたかはわかりません)。

変更イベントは、焼成されinputselectおよびtextarea要素の値に変更がユーザーによってコミットされたときの要素。入力イベントとは異なり、要素の値が変更されるたびに変更イベントが発生するわけではありません

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.