C'è un modo per modificare il contenuto di uno input
o textarea
con javascript e fare in modo che tale modifica sia annullata con il comando "annulla" del browser (ad esempio ctrl-Z
)?È possibile modificare un input di testo con javascript e aggiungerlo allo stack di annullamento?
Sto cercando di inserire una stringa, come "Foo {0} bar", nel valore della selezione, e se l'utente ha selezionato un intervallo, l'intervallo selezionato viene inserito nella stringa al posto del "{0}".
Ad esempio se la textarea contiene "Esempio 1 2 3" e il cursore si trova su "Esempio 1 | 2 3", la funzione cambierebbe il valore in "Esempio 1Foo blah bar 2 3" (valueIfNothingSelected
è "blah" " in questo caso). Se è stato selezionato l'intervallo "1 2", la funzione cambierebbe invece il valore in "Esempio Foo 1 2 bar 3".
In Chrome ho provato questa funzione, e fa quello che si suppone, ma non posso invertire la modifica con undo
.
function insertTextAtCursor(text, valueIfNothingSelected) {
var field = $('textarea[name="task_log_description"]')[0];
var startPos = field.selectionStart;
var endPos = field.selectionEnd;
var processedText;
if (startPos == endPos) {
processedText = text.replace('{0}', valueIfNothingSelected);
field.value = field.value.substring(0, startPos) + processedText + field.value.substring(endPos, field.value.length);
field.selectionStart = startPos + text.indexOf('{0}');
field.selectionEnd = field.selectionStart + valueIfNothingSelected.length;
} else {
var selectedText = field.value.substring(startPos, endPos);
processedText = text.replace('{0}', selectedText);
field.value = field.value.substring(0, startPos) + processedText + field.value.substring(endPos, field.value.length);
field.selectionStart = startPos + text.indexOf('{0}');
field.selectionEnd = field.selectionStart + selectedText.length;
}
field.focus();
}
ctrl-z già funziona per me in Chrome + Firefox su Ubuntu 14.04. Qual è la situazione in cui non funziona per te? – Jack
@Jack Domanda estesa per includere il mio metodo javascript. Per qualsiasi motivo, 'Ctrl-z' non funziona quando si usa questo metodo. –
possibile duplicato di [Javascript textarea undo redo] (http://stackoverflow.com/questions/7553430/javascript-textarea-undo-redo) – Fraser