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.
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.
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à.
Ho ricevuto un errore su input.createTextRange. l'oggetto non supporta questa proprietà o metodo. –
@dIvYaNsHsInGh: Ciò significa che l'oggetto che stai passando non è un elemento input/textarea. –
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.
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
Cerca di spiegare '(range.offsetLeft - 1)/7;'? –
Err, non ne ho idea, ho cercato una funzione di posizione di accento su Google – Harmen
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. –
È necessario selezionare * un carattere * rispetto a un'espressione regolare? – mkluwe
è 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