javascript - Spåra backsteg och del på "input"-händelsen?


Hur gör man det?

Jag försökte:

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

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

men det fungerar inte...

Om jag gör samma sak vid keypress-händelsen fungerar det, men jag vill inte använda keypress eftersom det skriver ut den inmatade tecknet i mitt inmatningsfält. Jag behöver kunna kontrollera det.

min kod:

  $('#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);
  });

ingent tecken bör läggas till i min inmatning, förutom det jag faktiskt lägger till med val(), själva användarens inmatning bör helt ignoreras, endast tangenttryckningsaktionen är viktig för mig

Svar #1

Använd .onkeydown och avbryt borttagningen med return false;. Så här:

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

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

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

Eller med jQuery, eftersom du lade till en jQuery-tagg till din fråga:

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

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

Svar #2

event.key === "Backspace"

Mer nyligen och mycket renare: använd event.key. Inga fler godtyckliga siffkoder!

input.addEventListener('keydown', ({key}) => {
    if (key === "Backspace" || key === "Delete") {
        return false;
    }
});

Mozilla-dokument

Stödja webbläsare

Svar #3

Det är en gammal fråga, men om du ville fånga ett backstege-händelse på input, och inte keydown, keypress eller keyup—eftersom jag har märkt att någon av dessa bryter vissa funktioner jag har skrivit och orsakar awkward fördröjningar med automatiserad textformatering—kan du fånga en backstege med hjälp av inputType:

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

Svar #4

Med jQuery

Egenskapen event.which normaliserar event.keyCode och event.charCode. Det rekommenderas att använda event.which för tangentbordsinmatning.

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

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

Relaterade artiklar