[javascript] “입력”이벤트에서 백 스페이스 및 del을 감지합니까?

그렇게하는 방법?

나는 시도했다 :

var key = event.which || event.keyCode || event.charCode;

if(key == 8) alert('backspace');

하지만 작동하지 않습니다 …

키 누르기 이벤트에서 동일한 작업을 수행하면 작동하지만 입력 필드에 입력 된 문자를 출력하기 때문에 키 누르기를 사용하고 싶지 않습니다. 나는 그것을 제어 할 수 있어야합니다


내 코드 :

  $('#content').bind('input', function(event){

    var text = $(this).val(),
        key = event.which || event.keyCode || event.charCode;

    if(key == 8){
      // here I want to ignore backspace and del
    }

    // here I'm doing my stuff
    var new_text = 'bla bla'+text;
    $(this).val(new_text);
  });

내 입력에 문자를 추가해서는 안됩니다. val ()으로 추가하는 것 외에 실제로 사용자의 입력은 완전히 무시되어야합니다. 키 누르기 동작 만 중요합니다.



답변

으로 .onkeydown제거를 사용 하고 취소하십시오 return false;. 이렇게 :

var input = document.getElementById('myInput');

input.onkeydown = function() {
    var key = event.keyCode || event.charCode;

    if( key == 8 || key == 46 )
        return false;
};

또는 jQuery를 사용하여 질문에 jQuery 태그를 추가했기 때문에 :

jQuery(function($) {
  var input = $('#myInput');
  input.on('keydown', function() {
    var key = event.keyCode || event.charCode;

    if( key == 8 || key == 46 )
        return false;
  });
});


답변

jQuery 사용

event.which 속성은 event.keyCode 및 event.charCode을 정상화. 키보드 키 입력을 위해 이벤트를 시청하는 것이 좋습니다.

http://api.jquery.com/event.which/

jQuery('#input').on('keydown', function(e) {
    if( e.which == 8 || e.which == 46 ) return false;
});


답변

event.key === “백 스페이스”

더 최근에 더 깔끔하게 : event.key. 더 이상 임의의 숫자 코드가 없습니다!

input.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Backspace" || key === "Delete") {
        return false;
    }
});

Mozilla 문서

지원되는 브라우저


답변

‘onkeydown’을 사용해 보셨습니까? 이것은 당신이 찾고있는 이벤트입니다.

입력이 삽입되기 전에 작동하며 문자 입력을 취소 할 수 있습니다.


답변

오래된 질문이지만 키 다운, 키 누름 또는 키업이 아닌 입력시 백 스페이스 이벤트를 포착하려는 경우 이러한 기능 중 하나가 내가 작성한 특정 기능을 중단하고 자동화 된 텍스트 서식 지정으로 어색한 지연을 유발하는 것을 발견했습니다. — inputType을 사용하여 백 스페이스를 잡을 수 있습니다.

document.getElementsByTagName('input')[0].addEventListener('input', function(e) {
    if (e.inputType == "deleteContentBackward") {
        // your code here
    }
});


답변

keydownevent.key === "Backspace" or "Delete"

더 최근에 더 깔끔하게 : event.key. 더 이상 임의의 숫자 코드가 없습니다!

input.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; ES6+
    if (key === "Backspace" || key === "Delete") {
        return false;
    }
});

현대적인 스타일 :

input.addEventListener('keydown', ({key}) => {
    if (["Backspace", "Delete"].includes(key)) {
        return false
    }
})

Mozilla 문서

지원되는 브라우저


답변

$('div[contenteditable]').keydown(function(e) {
// trap the return key being pressed
if (e.keyCode === 13 || e.keyCode === 8)
{
    return false;
}
});