Ajout a la position du curseur

pigeon11 Messages postés 16 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 4 mai 2009 - 28 avril 2009 à 11:48
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 - 4 mai 2009 à 19:47
Bonjour,


J'ai copié le code suivant dans un fichier .html,  pour ajouter du texte à la position du curseur dans un textarea mais ça ne marche pas.


Je n'ai aucune erreur, mais quand je clique sur le bouton ajouter aucun texte ne s'ajoute dans le textearea.


 


<HTML>
<HEAD>
<TITLE>Insert</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function storeCaret (textEl)
{
if (textEl.createTextRange)
textEl.caretPos = document.selection.createRange().duplicate();
}
function insertAtCaret (textEl, text)
{
if (textEl.createTextRange && textEl.caretPos)
{
var caretPos = textEl.caretPos;caretPos.text caretPos.text.charAt(caretPos.text.length - 1) ' ' ? text + ' ' : text;
}
else
textEl.value  = text;
}
</SCRIPT>
</HEAD>

<FORM>
<textarea rows="5" name="zonetexte" cols="20"ONSELECT="storeCaret(this);"ONCLICK="storeCaret(this);"ONKEYUP="storeCaret(this);"> C'est le début du texte.</textarea>

</FORM>

</HTML>




Merci pour vos aides

4 réponses

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
29 avril 2009 à 23:10
Bonsoir,

Tu aurais dû poster ta question dans le forum javascript : c'est plus adapté.
Je ne sais pas pourquoi rien ne se passe : mais je ne crois pas que createtextrange puisse fonctionner sous firefox.
Si ton problème se pose sous IE, donnes-tu le js que tu utilises, ou celui de ta source ? Parce que, sauf si le js est désactivé chez toi, le code marche bien sous IE 7. Ou alors, si tu l'as adapté, c'est ton adaptation qui peut poser problème (nb. en général, pour faire un débogage javascript, y compris sous visual studio, tu dois activer le débogage des scripts dans Internet Explorer...)
Une suggestion de code, en repartant du tiens, pour le js, serait (en reprenant ici un code trouvé sur le net, pour firefox, que j'adapte seulement, et qui devrait marcher tant pour IE que pour firefox) :

var toto;
var begin;
var end;
function storeCaret (textEl)
{
if (textEl.caretPos != "undefined" && textEl.createTextRange)
{
textEl.caretPos = document.selection.createRange().duplicate();
toto=textEl.caretPos;
}
else
 {
  begin = textEl.value.substr(0, textEl.selectionStart);
  end = textEl.value.substr(textEl.selectionEnd);  
  toto = begin + selection + end;
 }
}
function insertAtCaret (textEl, text)
{
if (textEl.createTextRange && textEl.caretPos)
{
var caretPos = textEl.caretPos;caretPos.text caretPos.text.charAt(caretPos.text.length - 1) ' ' ? text + ' ' : text;
}
else
{
textEl.value  = begin + text + end;
}
}

GGtry
0
pigeon11 Messages postés 16 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 4 mai 2009
30 avril 2009 à 12:45
Merci pour votre réponse.

Si je crée un fichier html pour test, ça marche.

Mais, sous dotnet, si j'ajoute le code javascript, ça me donne l'erreur suivante :

createTextRange a la valeur null ou n'est pas un objet

Merci pour vos aides
0
pigeon11 Messages postés 16 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 4 mai 2009
4 mai 2009 à 18:40
Bonsoir,


ça marche si je positionne le curseur mais j'ai un problème.


si je clique sur le bouton qui ajoute du texte sans que je ne positionne le curseur ce la m'affiche dans le texearea :


  undefined LE TEXTE undefined


dans page aspx j'ai une DropDownList, lorsque je clique sur un élément de la liste cela affiche des données dans le textearea


et quand je clique sur le bouton qui ajoute du texte sans que je ne positionne le curseur dans le texte area cela ecrase le contenu


affiché dans le textearea et le remplace par :


undefined LE TEXTE undefined


Merci pour vos aides


 
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
4 mai 2009 à 19:47
Bonsoir,

Oui, c'est normal. Le js donné ci-dessus est minimal et assez mauvais (et d'ailleurs la variable toto n'y sert à rien...)
Tu peux tester par exemple si begin ou end sont undefined ou non :

function insertAtCaret (textEl, text)
{
if (textEl.caretPos && textEl.createTextRange)
{
var caretPos = textEl.caretPos;caretPos.text caretPos.text.charAt(caretPos.text.length - 1) ' ' ? text + ' ' : text;
}
else if (begin != undefined)
{
textEl.value  = begin + text + end;
}
}

GGtry
0
Rejoignez-nous