Quelle est la meilleure façon (et j’imagine que le moyen le plus simple) pour placer le curseur à la fin du texte dans un élément de saisie de texte via JavaScript - après mise au point a été défini pour l’élément ?
Réponses
Trop de publicités?Il y a une manière beaucoup plus simple pour y parvenir.
Utilisation de jQuery pour définir l’auditeur, mais il n’est pas nécessaire dans le cas contraire
--OU--
jQuery-moins
Emprunt `` fonction de cette réponse.
J’ai fait face à cette même question (après le réglage de mise au point par le biais de RJS/prototype) dans Internet Explorer. Firefox sortait déjà le curseur à la fin quand il y a déjà une valeur pour le champ. IE forçait le curseur au début du texte.
La solution, à que je suis arrivé est comme suit :
Cela fonctionne dans IE7 et FF3
Après le piratage de avec ce un peu, j'ai trouvé le meilleur moyen est d'utiliser l' setSelectionRange
de la fonction si le navigateur prend en charge; si non, revenir à l'aide de la méthode de Mike Berrow de la réponse (c'est à dire remplacer la valeur par lui-même).
Je suis également la mise en scrollTop
pour une valeur élevée dans le cas où nous sommes dans une verticale de défilement textarea
. (À l'aide d'une valeur élevée arbitraire semble plus fiable que $(this).height()
dans Firefox et google Chrome.)
Je l'ai fait c'est comme un plugin jQuery. (Si vous n'êtes pas à l'aide de jQuery j'ai confiance, vous pouvez toujours obtenir l'essentiel assez facilement.)
Je l'ai testé dans IE6, IE7, IE8, Firefox 3.5.5, Google Chrome 3.0, Safari 4.0.4, Opera 10.00.
Il est disponible sur jquery.com comme le PutCursorAtEnd plugin. Pour votre commodité, le code de la version 1.0 est comme suit:
// jQuery plugin: PutCursorAtEnd 1.0
// http://plugins.jquery.com/project/PutCursorAtEnd
// by teedyay
//
// Puts the cursor at the end of a textbox/ textarea
// codesnippet: 691e18b1-f4f9-41b4-8fe8-bc8ee51b48d4
(function($)
{
jQuery.fn.putCursorAtEnd = function()
{
return this.each(function()
{
$(this).focus()
// If this function exists...
if (this.setSelectionRange)
{
// ... then use it
// (Doesn't work in IE)
// Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.
var len = $(this).val().length * 2;
this.setSelectionRange(len, len);
}
else
{
// ... otherwise replace the contents with itself
// (Doesn't work in Google Chrome)
$(this).val($(this).val());
}
// Scroll to the bottom, in case we're in a tall textarea
// (Necessary for Firefox and Google Chrome)
this.scrollTop = 999999;
});
};
})(jQuery);