19 votes

JQUERY Définir le curseur de la zone de texte à la fin du texte

http://jsfiddle.net/adamadam123/gEEVM/4/

Je construis un système de chat qui permet aux utilisateurs d'ajouter des émoticônes.

Comme dans l'exemple de jsfiddler ci-dessus, je prends le texte actuel dans la zone de texte, je le combine avec le symbole d'émoticône choisi, puis je réintroduis ce texte dans la zone de texte.

$(function() {
    var data = $('textarea').val();
    var emoticon = ':)';
    $('textarea').val(data + emoticon);
    $('textarea').focus();
});  

Le problème est que lorsque je remets le focus dans la zone de texte, le curseur se trouve au début du texte.

Comment puis-je placer le curseur à la fin du texte - pour permettre la poursuite de la saisie ?

36voto

DarkAjax Points 8324

Une chose simple que vous pouvez faire est de réinitialiser la valeur de la zone de texte :

$(function() {
    var data = $('textarea').val();
    var emoticon = ':)';
    $('textarea').focus().val('').val(data + emoticon);
});

10voto

1.44mb Points 651

D'abord la mise au point, puis le réglage de la valeur. Comme ceci JSFiddle

$('textarea').focus();
$('textarea').val("New Text");

Une autre façon est d'ajouter ceci après .focus() ;

$('textarea').val($('textarea').val() + ' ');

Il ajoute un espace à la fin de la zone de texte, ce qui permet de mettre l'accent sur la fin.

1voto

ADI Points 19

A très Une solution simple.

var emoticon = ':)';
var val = $('#textarea').val();
$('#textarea').select().val(val + emoticon);

0voto

VMAtm Points 8401

Vous devriez revoir cette question :

jQuery Définir la position du curseur dans la zone de texte

La solution JQuery la plus élégante qui soit :

$.fn.selectRange = function(start, end) {
    return this.each(function() {
        if (this.setSelectionRange) {
            this.focus();
            this.setSelectionRange(start, end);
        } else if (this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true);
            range.moveEnd('character', end);
            range.moveStart('character', start);
            range.select();
        }
    });
};

Avec cela, vous pouvez faire

$('#elem').selectRange(3,5);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X