[javascript] 키 누르기 이벤트 후 jquery .val ()을 어떻게 얻을 수 있습니까?

나는 얻었다 :

$(someTextInputField).keypress(function() {
  alert($(this).val());
});

이제 경고는 항상 키를 누르기 전에 값을 반환합니다 (예 : 필드가 비어 있고 ‘a’를 입력하고 경고가 ”를 제공합니다. 그런 다음 ‘b’를 입력하면 경고가 ‘a’를 제공합니다 …). 하지만 키를 누른 후 값을 원합니다. 어떻게해야합니까?

배경 : 텍스트 필드에 하나 이상의 문자가 포함되는 즉시 버튼을 활성화하고 싶습니다. 따라서 모든 키 누르기 이벤트에서이 테스트를 실행하지만 반환 된 val ()을 사용하면 결과가 항상 한 단계 뒤처집니다. change () 이벤트를 사용하는 것은 텍스트 상자를 떠날 때까지 버튼이 비활성화되기 때문에 옵션이 아닙니다. 더 나은 방법이 있다면 기쁩니다!



답변

변경 keypress하기 keyup:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});

keypress키를 눌렀을 때 발동되고, 키를 놓으면 keyup발동됩니다.


답변

아무도 js “입력”이벤트를 언급하지 않았다는 사실에 놀랐습니다.

$(someTextInputField).on('input', function() {
  alert($(this).val());
});

추천합니다.

https://developer.mozilla.org/en-US/docs/Web/Events/input


답변

키 누르기 대신 keyup을 사용하십시오 .


답변

또는 시간 제한이 0 인 keydown 이벤트를 사용할 수 있습니다.

이렇게하면 사용자가 키를 누르는 것을 중지 할 때 적용되는 대신 변경 사항이 즉시 적용됩니다.

$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});


답변

onchange키 이벤트를 사용하는 대신 이벤트 핸들러 를 연결할 수 있습니다 .

$(someTextInputField).change(function() {
    alert($(this).val());
});

사용 Edit > Paste하거나 마우스 오른쪽 단추로 클릭 한 변경 이벤트가 발생합니다 붙여 넣기 한 후하지만 키 이벤트. 참고 일부 붙여 넣기에 키 이벤트를 시뮬레이션 할 수 있습니다 브라우저 (내가 어떤 알고하지 않습니다하지만)하지만 당신은 할 수없는 의지 하는 행동.


답변

다음과 같이 시도하십시오.

$('#someField').keypress(function() {
  setTimeout(function() {
    if ($('#someField').val().length > 0)
      $('#theButton').attr('disabled', false);
  }, 1);
});

이는 단순히 시간 제한을 도입하여 “keypress”이벤트 루프가 완료된 후 코드가 거의 즉시 실행되도록합니다. 이러한 짧은 타이머 간격 (브라우저에서 반올림하더라도)은 눈에 띄지 않습니다.

편집 — 또는 다른 사람들이 말하는 것처럼 “keyup”을 사용할 있지만 그 의미는 다릅니다.


답변