2010-07-06 24 views
6

nel campo Input, se l'utente preme Backspace o il tasto Canc, c'è un modo per ottenere il carattere cancellato.Come carattere eliminato

Ho bisogno di controllarlo contro un RegExp.

+0

È necessario selezionare * un carattere * rispetto a un'espressione regolare? – mkluwe

+0

è possibile allegare un gestore * keyup * e attendere il carattere backspace, impedire l'azione predefinita, effettuare la rimozione da soli, ma prima si conosce quale è l'ultimo carattere in modo da poter eseguire la regex. – galambalazs

risposta

7

Di seguito funziona in tutti i principali browser per il testo <input> elementi. Non deve essere utilizzato per gli elementi <textarea> poiché la funzione getInputSelection non tiene conto correttamente delle interruzioni di riga in IE. Vedi this answer per una (più lunga) funzione che lo farà.

+0

Ho ricevuto un errore su input.createTextRange. l'oggetto non supporta questa proprietà o metodo. –

+0

@dIvYaNsHsInGh: Ciò significa che l'oggetto che stai passando non è un elemento input/textarea. –

3

No, non è presente alcuna variabile che memorizzi il carattere eliminato. A meno che non si abbia una cronologia per Annulla/Ripristina, ma sarebbe difficile ottenere le informazioni da quel componente.

Il più semplice sarebbe confrontare il contenuto del campo di input prima e dopo aver eliminato/backspace.

1

Si potrebbe provare qualcosa con la posizione del cursore:

function getCaretPosition(control){ 
    var position = {}; 
    if (control.selectionStart && control.selectionEnd){ 
    position.start = control.selectionStart; 
    position.end = control.selectionEnd; 
    } else { 
    var range = document.selection.createRange(); 
    position.start = (range.offsetLeft - 1)/7; 
    position.end = position.start + (range.text.length); 
    } 

    position.length = position.end - position.start; 
    return position; 
} 

document.getElementById('test').​​​​onkeydown = function(e){ 
    var selection = getCaretPosition(this); 
    var val = this.value; 

    if((e.keyCode==8 || e.keyCode==46) && selection.start!==selection.end){ 
    alert(val.substr(selection.start, selection.length)); 
    } else if(e.keyCode==8){ 
    alert(val.substr(selection.start-1, 1)); 
    } else if(e.keyCode==46){ 
    alert(val.substr(selection.start, 1)); 
    } 
}​ 

Testato su Chrome 6. Vedi jsFiddle per un esempio

+1

Cerca di spiegare '(range.offsetLeft - 1)/7;'? –

+0

Err, non ne ho idea, ho cercato una funzione di posizione di accento su Google – Harmen

+0

La funzione di posizione del cursore è dubbia. Non solo per quella linea, il cui scopo è oltre me, ma per il test per 'control.selectionStart && control.selectionEnd': questo restituirà false se entrambi sono 0, il che non è buono e causerà errori nei browser non IE. –

Problemi correlati