Il problema è che Chrome (non ho sentito parlare di Safari fare questo pure, ma ti porterà sulla parola) uccide la selezione dopo l'evento attenzione si è sparato, quindi è necessario aggiungere un timer. Quanto segue è adattato da mia risposta qui:
How to place cursor at end of text in textarea when tabbed into
Tuttavia, questo genere non è una buona usabilità: è in contrasto con ciò che l'utente si aspetta e rimuove la funzionalità utile quando si utilizza il mouse (vale a dire il punto di inserimento andando al posizione in cui l'utente fa clic). Probabilmente è possibile aggirare il problema con un po 'di gestione degli eventi mousedown
e mouseup
.
demo dal vivo: http://jsfiddle.net/timdown/z9DhX/1/
Codice:
function moveCaretToStart(el) {
if (typeof el.selectionStart == "number") {
el.selectionStart = el.selectionEnd = 0;
} else if (typeof el.createTextRange != "undefined") {
el.focus();
var range = el.createTextRange();
range.collapse(true);
range.select();
}
}
var textBox = document.getElementById("id");
textBox.onfocus = function() {
moveCaretToStart(textBox);
// Work around Chrome's little problem
window.setTimeout(function() {
moveCaretToStart(textBox);
}, 1);
};
fonte
2011-11-19 00:33:57
ho già provato prima di inviare questa domanda. Ci sono altre domande simili, ma sia createTextRange che setSelectionRange non funzionano per me sul mio safari n chrome .. qualche suggerimento perché? –
Questo non dovrebbe essere chiuso come duplicato in quanto non ci sono risposte alla domanda di cui sopra che risolvono questo problema - che fallisce in Webkit. – gilly3