'입력'요소에 대한 '변경'이벤트와 '입력'이벤트의 차이점


109

누군가 changeinput이벤트 의 차이점이 무엇인지 말해 줄 수 있습니까 ?

추가를 위해 jQuery를 사용하고 있습니다.

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

또한 작동 input대신 change.

초점과 관련된 이벤트 순서에 약간의 차이가 있습니까?


rakshasingh.weebly.com/1/post/2012/12/… 이전 브라우저에서는 oninput이 지원되지 않습니다. 그런 다음 onchange, onpaste 및 onkeyup을 해결 방법으로 사용할 수 있습니다. 추신 : oninput 이벤트는 IE9에서도 버그가 있으며 삭제시 발생하지 않습니다.
A. Wolff

1
입력은 키를 누른 후와 같이 더 자주 발생하는 반면 change는 기본적으로 입력이 흐려지고 값이 입력에 집중되었을 때의 값이 아닐 때 발생합니다.
dandavis 2013-06-11

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
나는 두 사람의 차이점에 대해 아직 명확하지 않습니다. 귀하의 설명과 매우 유사하게 들립니다.
Justin Morgan

10
@JustinMorgan JSFiddle 예제에서와 같이 onchange"요소가 포커스를 잃을 때" oninput발생 하는 반면 모든 텍스트 변경시 발생합니다.
Ionică Bizău

1
차이점은 oninput 이벤트는 요소의 값이 변경된 직후에 발생하는 반면 onchange는 콘텐츠가 변경된 후 요소가 포커스를 잃을 때 발생한다는 것입니다.
NinoLopezWeb

1
즉, "입력"은 문자가 변경, 삭제 또는 추가 될 때 즉시 트리거되며 컨트롤이 포커스를 잃은 후 "변경"이 평가되고 값이 변경된 경우에만 발생합니다
Adam Moszczyński

방금 Chrome으로 시도했습니다. onchange여전히 초점을 맞추는 동안 Enter 키를 누르면 트리거됩니다.
Rick

24
  • change event대부분의 브라우저에서 화재 콘텐츠가 변경 될 때와 요소 잃는다 focus. 기본적으로 변경 사항의 집합체입니다. 경우와 같이 모든 단일 변경에 대해 실행되지 않습니다 input event.

  • input event화재는 요소의 내용의 변화를 동 기적으로. 따라서 이벤트 리스너는 더 자주 실행되는 경향이 있습니다.

  • 특정 유형의 상호 작용에 대해 변경 이벤트를 실행해야하는지 여부에 대해 브라우저마다 항상 동의하는 것은 아닙니다.


입력 이벤트가 동 기적으로 발생하는 것이 보장되지 않는다고 생각합니다.
Tim Down

또한 모든 브라우저의 최신 버전이 input이벤트를 지원합니다 .
Tim Down

2
@TimDown, 그것이 내가 브라우저 지원이 다양하다고 말한 이유입니다. 모든 사람이 모든 브라우저의 최신 버전을 가지고있는 것은 아닙니다.
Gabe

@TimDown 동기식으로 실행됩니까?
Suraj Jain

@SurajJain : 솔직히 잘 모르겠습니다.
Tim Down

1

MDN 문서에는 명확한 설명이 있습니다 (언제 추가되었는지 확실하지 않음) :

변경 이벤트가 해고되고 input, select그리고 textarea요소 요소의 값으로 변경은 사용자가 최선을 다하고 있습니다 때. 입력 이벤트와 달리 변경 이벤트는 요소의 값이 변경 될 때마다 반드시 발생하는 것은 아닙니다 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.