Backspace algılandı ve "giriş" olayını delin mi?


95

Bu nasıl yapılır?

Denedim:

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

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

ama işe yaramıyor ...

Aynı şeyi tuşa basma olayında yaparsam çalışır, ancak tuşa basmayı kullanmak istemiyorum çünkü girdi alanımda yazılan karakteri çıktılar. Bunu kontrol edebilmem gerek


benim kodum:

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

benim girdime hiçbir karakter eklenmemeli, val () ile eklediğim şeyin yanı sıra aslında kullanıcıdan gelen girdi tamamen yok sayılmalı, sadece tuşa basma eylemi benim için önemli


3
Aslında or'ing - olayını yapmanıza gerek yoktur, bu gayet iyi, jQuery olay nesnesini sizin için normalleştirir. Bkz api.jquery.com/category/events/event-object
Niko

.bindSeçici değil , ilk argüman olarak olayın adını koymanız gerekiyor . Olmalı$('content').bind('keypress', ...
pmrotule

Yanıtlar:


123

.onkeydownKaldırmayı ile kullanın ve iptal edin return false;. Bunun gibi:

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

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

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

Veya jQuery ile, sorunuza bir jQuery etiketi eklediğiniz için:

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

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


19
Ya bir sağ tıklama> yapıştırma ile girdi yakalamak isteseydiniz?
2013

6
keydownChrome Android'de çalışmıyor, geri tuşuna veya del'e tıklandığında boşluk döndürüyor
Kosmetika

2
Fonksiyonda olayı parametre olarak tutmalıyız, o zaman sadece fonksiyon (olay) gibi çalışır -------------------------- var input = document. getElementById ('Girdiğim'); input.onkeydown = işlev (olay) {var key = event.keyCode || event.charCode; eğer (anahtar == 8 || anahtar == 46) yanlış döndür; };
Anurag_BEHS

1
jQuery ile olayları dahili olarak filtreler enterve backspacetuşlara inputbasar ve bu tuşlara
basılamaz

@Wouter - Bu büyük bir mesele değil, ama sanırım jquery kodunda bir yazım hatası var. Sanırım "event" parametre adını on-keydown olay işleyicisine eklemek istediniz.
RoboBear

14

JQuery ile

Event.which mülkiyet event.keyCode ve event.charCode normalleştirir. Klavye tuş girişi için olayı izlemeniz önerilir.

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

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

2
Uzun zamandır jQuery kullanıyorum ama bunu görmedim. Yeni bir şeyler öğrenmek her zaman iyidir. +1!
Sablefoste

10

event.key === "Geri al"

Daha yeni ve çok daha temiz: kullanın event.key. Artık keyfi sayı kodları yok!

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

Mozilla Belgeleri

Desteklenen Tarayıcılar


Sometimes event.key returns "Process" for a reason I cannot understand...
Oscar Chambers

Bu desteklenen bir tarayıcıdır. Bir
hatanız

3

'Onkeydown' kullanmayı denediniz mi? Aradığınız olay bu.

Giriş eklenmeden önce çalışır ve karakter girişini iptal etmenize izin verir.


ama nasıl iptal ederim? çünkü girişte val () kullanıyorum ve yazılan karakteri hala ekliyor
Alex

3
Nasıl olur event.preventDefault()?
Niko

return false;JQuery'yi kullanırken herhangi bir olayı iptal edebilirsiniz .
iMoses

3

Bu eski bir sorudur, ancak tuşa basma, tuşa basma veya tuş basma yerine girişte bir geri alma olayını yakalamak istiyorsanız - yazdığım bu belirli işlevlerden herhangi birinin bozulduğunu ve otomatik metin biçimlendirme ile garip gecikmelere neden olduğunu fark ettiğim gibi - inputType'ı kullanarak bir geri tuşu yakalayabilirsiniz:

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

3

keydown ile event.key === "Backspace" or "Delete"

Daha yeni ve çok daha temiz: kullanın event.key. Artık keyfi sayı kodları yok!

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

Modern tarz:

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

Mozilla Belgeleri

Desteklenen Tarayıcılar



0
//Here's one example, not sure what your application is but here is a relevant and likely application 
function addDashesOnKeyUp()
{
    var tb = document.getElementById("tb1"); 
    var key = event.which || event.keyCode || event.charCode;

    if((tb.value.length ==3 || tb.value.length ==7 )&& (key !=8) ) 
    {
        tb.value += "-"
    } 
}

0

chrome kullanan android cihazlarda bir backspace tespit edemiyoruz. Bunun için geçici çözümü kullanabilirsiniz:

var oldInput = '',
    newInput = '';

 $("#ID").keyup(function () {
  newInput = $('#ID').val();
   if(newInput.length < oldInput.length){
      //backspace pressed
   }
   oldInput = newInput;
 })

Gerçekten bu cevap istemiyorum, ama onlar set beri gibi görünüyor whichve keyCodeila 229 daha iyi bir yolu veya yakında daha iyi bir yolu olmalı, ama şimdi için temelde bu kullanarak olacak. ..
JohnnyFun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.