2013-06-11 6 views
49

Kann mir jemand sagen, was der Unterschied zwischen den change und input Ereignissen ist?Was ist der Unterschied zwischen "Change" und "Input" -Ereignis für ein INPUT-Element

ich jQuery bin mit ihnen für das Hinzufügen von:

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

Es funktioniert auch mit input statt change.

Vielleicht ein Unterschied in der Reihenfolge der Ereignisse relativ zum Fokus?

+0

http://rakshasingh.weebly.com/1/post/2012/12/what-is-the- difference-zwischen-on-on-on-und-on-change-events-in-javascript.html Beachten Sie, dass On-Input in älteren Browsern nicht unterstützt wird. Sie könnten dann: onchange, onpaste und onkeyup als Workaround verwenden. PS: oninput Ereignis ist auch fehlerhaft in IE9 und es wird nicht beim Löschen ausgelöst. –

+1

wird häufiger ausgelöst, z. B. nach einem Tastendruck, während die Änderung grundsätzlich ausgelöst wird, wenn der Eingang unscharf ist und der Wert nicht der Wert ist, der beim Fokussieren des Eingangs angezeigt wurde. – dandavis

+0

Das Ereignis "input" erfasst auch das Einfügen. Siehe http://StackOverflow.com/Questions/15727324/for-a-javascript-autocomplete-search-box-must-we-use-the-input-event-handler – Antony

Antwort

48

Nach this post:

  • oninput Ereignis tritt auf, wenn der Textinhalt eines Elements über die Benutzeroberfläche geändert wird.

  • onchange tritt auf, wenn die Auswahl, der Überprüfungsstatus oder der Inhalt eines Elements geändert hat. In einigen Fällen tritt es nur auf, wenn das Element den Fokus verliert. Das onchange-Attribut kann verwendet werden mit: <input>, <select> und <textarea>.

TL; DR:

  • oninput: jeder in dem Textinhalt vorgenommene Änderung
  • onchange:
    • Wenn es eine <input />: Veränderung + Fokus verlieren
    • Wenn es eine <select>: Änderung Option

$("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>

+6

Ich bin immer noch unklar über den Unterschied zwischen den beiden. Sie klingen sehr ähnlich von Ihren Beschreibungen. –

+6

@JustinMorgan Wie im JSFiddle-Beispiel tritt die 'onchange' auf" wenn das Element den Fokus verliert ", während der' oninput' bei jeder Textänderung auftritt. –

+1

Der Unterschied besteht darin, dass das oninput-Ereignis unmittelbar nach dem Ändern des Werts eines Elements auftritt, während eine Änderung auftritt, wenn das Element den Fokus verliert, nachdem der Inhalt geändert wurde. – NinoLopezWeb

16
  • Die changeevent Brände in den meisten Browsern, wenn der Inhalt geändert wird und verliert das Element focus, im Grunde ein Aggregat von Änderungen. Sie sehen dies nicht für jede einzelne geändert im Gegensatz zu der inputevent gefeuert.

  • Die inputevent wird synchron bei Änderung des Inhalts für das Element ausgelöst. Sie werden sehen, dass dieses Ereignis öfter auftritt. Die Browserunterstützung variiert.

+0

Ich glaube nicht, dass das Eingangsereignis synchron synchron abläuft. –

+0

Auch aktuelle Versionen aller Browser unterstützen das Ereignis 'input'. –

+2

@TimDown, deshalb habe ich gesagt, Browser-Support variiert. Nicht jeder hat die aktuelle Version jedes Browsers. – Gabe

Verwandte Themen