2010-05-31 13 views
6

IS è possibile (cross-browser compatibile) per ANNULLA un tasto dopo che un utente ha fatto (ad esempio su una casella di testo)Annulla una combinazione di tasti in jQuery

Il codice Attualmente uso le modifiche al valore di testo dopo è stata mostrata la sequenza di tasti:

$('.number').keypress(function() { 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 

risposta

4

RISOLTO (e aggiornata)

Mi scuso, non ho provato l'opzione più ovvia - che ha funzionato:

$('.number').keypress(function(event) { 
    return /[0-9\.]/.test(String.fromCharCode(event.keyCode)); 
}); 
+1

+1 Questo è il modo per farlo se non si desidera visualizzare brevemente la voce vietata. Puoi pulirlo un po 'usando 'test()', come questo: '/ [^ 0-9 \.] /. Test (String.fromCharCode (event.keyCode))'. Nessuna sostituzione o assegnazione è necessaria dal momento che stai facendo 'return false;'. Non c'è bisogno dell'identificatore globale 'g', dal momento che stai testando un singolo evento chiave. – user113716

+0

Grazie, ho aggiornato la mia risposta con il tuo suggerimento con un piccolo cambiamento - rimuovendo il carrat (^) dal regex in quanto ciò invertirà il risultato del test :) Molto apprezzato! – Jimbo

4
$('.number').keypress(function() { 
    if (this.value == 'foobar'){ 
     // "Cancel" keystroke 
     return false; 
    } 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 
+0

Questo non funzionerebbe. Dovresti testare i valori proibiti in 'this.value' usando un'espressione regolare. Stai testando una corrispondenza esatta con l'insieme di 'this.value' – user113716

+0

In realtà, se l'istruzione' if() 'ha mai restituito' true', 'replace()' non sparava. Dal momento che stai provando contro 'this.value', questa è una parte cruciale. – user113716

Problemi correlati