Salut, je cherche a entourer une phrase sélectionner dans un champ de formulaire, un peu comme un bbcode et pour cela j'ai un champ textarea
Ainsi qu'un bouton
Et un code javascript qui me permet de faire ce que je souhaite
Tous fonctionne pour ce que je veux faire ! Mais j'ai tout de même deux problèmes
1. Lorsque j'ai dépasser le nombre de ligne visible dans le champ de formulaire par exemple 5 lignes et que je fait appel au bouton après avoir sélectionner le dernier mot, le curseur revient tout en haut du champ alors que je souhaiterai qu'il reste à la fin de la chaine de caractère.
2. Je souhaiterai que le bouton ai le nom TEST et que lorsque je clic dessus c'est [**][**] qui apparait, par exemple si je sélectionne le mot essai dans l'état actuel le script générera [TEST]essai[TEST] et je voudrai [**]essai[**]
Je précise qu'un bouton X devrai afficher [**]texte[**] et un bouton Y afficherai [##]texte[##]
Voila j'espère avoir été assez explicite et merci par avance
Modifié par kilian67 (21 May 2009 - 12:20)
<textarea name="message" id="message" rows="15" cols="76" tabindex="3" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" class="inputbox"></textarea>
Ainsi qu'un bouton
<INPUT TYPE="BUTTON" ID="I_BTN43" NAME="I_BTN41" VALUE="TEST" title="Mets des balises ** devant et après la phrase sélectionné" onclick="Fct_Btn43(value)" >
Et un code javascript qui me permet de faire ce que je souhaite
function Insert_Tag( where_, tagdeb_, tagfin_){
var Obj = document.getElementById( where_);
if( Obj){
Obj.focus();
if(typeof Obj.selectionStart != 'undefined'){
//-- Position du curseur
var PosDeb = Obj.selectionStart;
var PosFin = Obj.selectionEnd;
//-- Recup. des Chaines
var Chaine = Obj.value;
var szAvant = Chaine.substring( 0 , PosDeb);
var szApres = Chaine.substring( PosFin, Obj.textLength );
//-- Recup. texte selectionne
var szSelect = Chaine.substring( PosDeb, PosFin);
//-- Insertion des tags
Obj.value = szAvant + tagdeb_ + szSelect + tagfin_ + szApres;
//-- Replace le curseur
PosDeb = szAvant.length + tagdeb_.length +szSelect.length;
PosFin = PosDeb;
Obj.setSelectionRange( PosDeb, PosFin);
//-- Replace le Focus
Obj.focus();
}
else{ // IE and consort
var Decal;
//-- Recup. de la selection
var Chaine = document.selection.createRange();
var szSelect = Chaine.text;
Chaine.text = tagdeb_ + szSelect + tagfin_;
Chaine = document.selection.createRange();
//-- Replace le curseur avant balise fin
if( szSelect.length > 0){
//-- Le curseur est en debut de chaine
Decal = tagdeb_.length + szSelect.length;
//-(*)- Supprime les retours Chariot
Decal -= Get_NbrCR( szSelect);
}
else{
//-- Le curseur est en fin de chaine
Decal = -tagfin_.length;
}
//-- Deplace le curseur
Chaine.move('character', Decal);
Chaine.collapse();
Chaine.select();
}
}
}
//-----------------------
function Fct_Btn43(value){
var szTag ="";
szTag = document.getElementById('I_BTN43').value;
Insert_Tag('message', "["+ value +"]", "["+ value +"]");
}
Tous fonctionne pour ce que je veux faire ! Mais j'ai tout de même deux problèmes
1. Lorsque j'ai dépasser le nombre de ligne visible dans le champ de formulaire par exemple 5 lignes et que je fait appel au bouton après avoir sélectionner le dernier mot, le curseur revient tout en haut du champ alors que je souhaiterai qu'il reste à la fin de la chaine de caractère.
2. Je souhaiterai que le bouton ai le nom TEST et que lorsque je clic dessus c'est [**][**] qui apparait, par exemple si je sélectionne le mot essai dans l'état actuel le script générera [TEST]essai[TEST] et je voudrai [**]essai[**]
Je précise qu'un bouton X devrai afficher [**]texte[**] et un bouton Y afficherai [##]texte[##]
Voila j'espère avoir été assez explicite et merci par avance
Modifié par kilian67 (21 May 2009 - 12:20)