2009-04-28 7 views
1

J'ai un textarea qui convertit l'anglais à l'événement Hindi onkeyup. Mais quand je déplace le curseur vers l'arrière pour l'éditer, la première lettre que je tape convertit en hindi et le curseur se déplace à la fin de la chaîne. Est-ce possible de stocker le caret au même point dans le textarea, de sorte qu'il ne se déplace pas à la fin de la chaîne?Comment rendre textarea modifiable?

+0

Attendez, pourquoi est-il un problème que les carets se déplace vers la droite du personnage que vous venez de taper? N'est-ce pas un comportement normal? Si le curseur n'est pas placé après le nouveau caractère, vous taperez en arrière (chaque nouveau caractère apparaîtra à gauche du caractère précédent). – Calvin

+0

Son pas comme that..actually lors de l'insertion d'un nouveau personnage au milieu de la chaîne le curseur se déplace vers la droite du nouveau caractère tapé pendant un certain temps et il va jusqu'à la fin de la chaîne ... –

Répondre

0

Le problème avec ceci est que vous écrasez la valeur du textarea chaque place clé qui est ce qui rend le mouvement de caret.

Vous voulez obtenir la valeur du signe avant vous remplacez le texte et le réglez à nouveau après le remplacement.

Stackoverflow Answer: Get Caret Position - code de réponse lié ci-dessous non modifiée

function getCaret(el) { 
    if (el.selectionStart) { 
    return el.selectionStart; 
    } else if (document.selection) { 
    el.focus(); 

    var r = document.selection.createRange(); 
    if (r == null) { 
     return 0; 
    } 

    var re = el.createTextRange(), 
     rc = re.duplicate(); 
    re.moveToBookmark(r.getBookmark()); 
    rc.setEndPoint('EndToStart', re); 

    return rc.text.length; 
    } 
    return 0; 
} 

Stackoverflow Answer: Set Caret Position - code de réponse lié ci-dessous non modifiée

function SetCursorPosition(pos) 
{ 
    // HERE txt is the text field name 
    var obj=document.getElementById('<%= txt.ClientID %><%= txt.ClientID %>'); 

    //FOR IE 
    if(obj.setSelectionRange) 
    { 
     obj.focus(); 
     obj.setSelectionRange(pos,pos); 
    } 

    // For Firefox 
    else if (obj.createTextRange) 
    { 
     var range = obj.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
    } 
} 

Il y a quelques autres méthodes pour contourner ce problème en évitant le remplacement de tous les texte sur un événement clé et déplacez-le sur un bouton, appuyez sur, flou/flou ou autre chose. Cela vous permet de ne pas vous soucier de la position du curseur sur la fin.

Le seul inconvénient que je vois pour passer à un autre événement pour déclencher un changement de texte est tout simplement qu'il ne soit pas instantanée.