Souci avec un menu/liste pour editeur

Eléphant du PHP | 258 Messages

25 oct. 2006, 10:46

Bonjour a tous ,bon voila ce que je voudrais faire c'est un menu/liste ou il y aurais la taille du texte que je pourrais appliquer a mon texte dans la texerea.

Le soucis c'est que j'ai essayer plusieurs truc mais sa ne marche pas en faite il y aurais se genre de code a mettre met je ne sais pas ou:

Code : Tout sélectionner

<option value="10" <?php echo "<script> javascript:AddText('[size10]','','[/size10]');</script>";?>>10</option>
Bon moi je l'ai mis la met se n'est pas du tout sa.
Pourriez vous m'aider sur ce coup.
Merci a tous.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 oct. 2006, 11:01

Hello :)

C'est une action de l'utilisateur, donc côté client, donc en javascript, tu peux oublier la partie php :)
Sur un select, tu détectes l'événement à l'aide de l'attribut onChange :

Code : Tout sélectionner

<select name="toto" onChange="..."> ... </select>
L'idée est de récupérer la valeur du champ sélectionné et de l'utiliser dans l'appel à ta fonction. pour faire appel à l'objet courrant dans le onChange, tu peux utiliser la variable "this". Par exemple pour récupérer la valeur sélectionné tu feras :

Code : Tout sélectionner

this.options[this.selectedIndex].value
(this.value marche aussi, mais n'est pas toujours compatible avec tous les navigateurs)

Tes options peuvent donc garder une forme simple :

Code : Tout sélectionner

<option value="10">10</option>
Et il ne te reste plus qu'à renseigner le onChange pour faire appel à ta fonction avec la valeur sélectionné :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 258 Messages

25 oct. 2006, 11:04

merci ryle je vais voir sa et je reviend vous dire si j'ai reussi

Eléphant du PHP | 258 Messages

25 oct. 2006, 11:11

Ou la en faite j'ai pas compris je sais je suis un boulet ,je comprend vite mais il faut m'expliqué longtemps enfin bon j'ai commencer par sa mais deja je suis largé:

Code : Tout sélectionner

<select name="select" onChange="AddText('[size10]','','[/size10]');"> <option value="10">10</option> <option value="12" >12</option> </select>
Apres le

Code : Tout sélectionner

this.options[this.selectedIndex].value
je sais pas ou il faut le mettre
Désoler

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 oct. 2006, 11:51

Y a pas de soucis, faut bien commencer par apprendre ;)

Tu n'es pas loin de la solution. Actuellement, quelque soit la valeur choisie, ton texte doit récupérer la taille 10. Il faut donc changer cela pour que la taille soit paramétrable et dépende de la valeur sélectionnée

Je vais essayer de te détailler un peu plus ce que tu fais :

Code : Tout sélectionner

AddText('[size10]','','[/size10]');
En fait tu fais appel à la fonction javascript AddText en lui passant 3 paramètres. Ces 3 paramètres sont de type chaine de caractère. Tu peux donc les écrire de différentes manières (en les découpant et en les concaténant nottament), tout ce qui compte, c'est qu'à la fin tu obtiennes la chaine voulue :

Code : Tout sélectionner

// Toute ces écritures sont équivalentes : "size10" <=> 'size10' <=> "size" + "10" <=> "size" + (2*5) <=> ... // elles donneront toute à la fin la chaine "size10"
Ainsi, dans l'appel à ta fonction, ce qui t'interesse c'est de remplacer ton "10" écrit en dur par la valeur sélectionnée avec qu'au final, la chaine que tu passes en paramètre à ta fonction corresponde à size10, size12, etc. :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 258 Messages

25 oct. 2006, 12:30

Merci ryle pour t'est explications mais je suis pas reveiller ou quoi mais j'ai rien compris tu sais je debute en php alors en javascript je te raconte pas.

Bon le:

Code : Tout sélectionner

<script> javascript:AddText('[size10]','','[/size10]');</script>
Sa sa va car je l'utilise depuis un petit moment pour mon editeur ,pour mettre en gras,changer la couleur etc...

Apres une fonction php pour change tout sa et sa roule mais la je suis completement a l'ouest ou plus exactement sud-oeust(rire)


Donc j'ai cette fonction qui na pas etez faite par moi je precise car comme je l'ai dis le javascript c'est pas mon fort, j'aprend le php et apres le java mais comme j'ai vbesoin d'exemples concrés je fait des truc ou je sais que j'aurais besoins de JS enfin bon bref voila la fonction:

Code : Tout sélectionner

<script language="JavaScript" type="text/javascript"> function AddText(startTag,defaultText,endTag) { with(document.poster) { if (message.createTextRange) { var text; message.focus(message.caretPos); message.caretPos = document.selection.createRange().duplicate(); if(message.caretPos.text.length>0) { //gère les espace de fin de sélection. Un double-click sélectionne le mot //+ un espace qu'on ne souhaite pas forcément... var sel = message.caretPos.text; var fin = ''; while(sel.substring(sel.length-1, sel.length)==' ') { sel = sel.substring(0, sel.length-1) fin += ' '; } message.caretPos.text = startTag + sel + endTag + fin; } else message.caretPos.text = startTag+defaultText+endTag; } else message.value += startTag+defaultText+endTag; } } </script>
et d'apres se que tu dis il faut que je mette ca:

Code : Tout sélectionner

this.options[this.selectedIndex].value
dans ma fonction JS

Encore désoler

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 oct. 2006, 12:31

ça peut être un truc comme ça:
<p>Taille <select name="select" onChange="setTextSize(this.value);"> 

<option value="10" selected>10</option> 
<option value="12">12</option> 
<option value="14" >14</option> 

</select>
</p>
<p>Text<br /><TextArea id="Text" rows=20 cols=50></TextArea></p>

<script>
	//par défaut le texte est à 10
	setTextSize(10);
         //fonction pour fixer le BBcode [sizeXX] XX étant la taille choisie 
	function setTextSize(size){
                  //size : taille choisie
                  //Text : le textArea jouant le rôle de l'éditeur
		Text.innerText += "[size" + size + "] [/size" + size + "]";
              //ou: document.getElementById("Text").innerText += "[size" + size + "] [/size" + size + "]";	
	}
</script>
Modifié en dernier par sadeq le 25 oct. 2006, 14:03, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 oct. 2006, 12:39

Je pensais à quelque chose de plus simple :)

Je ne parlais pas de modifier la fonction que tu utilises, mais simplement de rendre dynamiques les paramètres que tu lui passes. Ce que je voulais te montrer, c'est qu'on peut découper une chaine de caractère et en modifier certains éléments :
// Ainsi :
<select name="select" onChange="AddText('[size10]','','[/size10]');">
// Equivaut à :
<select name="select" onChange="AddText('[size'+10+']','','[/size'+10+']');"> 

// Et si maintenant je souhaite remplacer mon 10 par la valeur sélectionnée, il me suffit d'écrire :
<select name="select" onChange="AddText('[size'+this.options[this.selectedIndex].value+']','','[/size'+this.options[this.selectedIndex].value+']');"> 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 258 Messages

25 oct. 2006, 12:40

Merci sadeq j'essaye et je te dis si sa va

Eléphant du PHP | 258 Messages

25 oct. 2006, 12:42

Je viend de voir ton code ryle j'essaye le deux et je vous dis sa.

Eléphant du PHP | 258 Messages

25 oct. 2006, 12:52

Merci a vous deux pour votre aide c'est super sympas bon pour le code de sadq j'ai essayé mais sa ne marche pas j'ai peut etre fait une mauvaise manip mais en tout cas sa ne met pas la textarea a jour.


Pour le code de ryle c'est impect c'est exactement sa.
C'est vrai que je ne comprenné pas trop ce que tu voulais me dire mais avec cette exemple j'ai enfin pigé ,enfin je crois mais sa reste quand meme balaise.

Merci à vous, rendez vous pour une prochaine question.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 oct. 2006, 12:54

Ceci simplifie le code de Ryle:

Code : Tout sélectionner

// Et si maintenant je souhaite remplacer mon 10 par la valeur sélectionnée, il me suffit d'écrire : <select name="select" onChange="AddText('[size'+this.value+']','','[/size'+this.value+']');">
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 258 Messages

25 oct. 2006, 13:34

Merci sadeq mais si tu regarde plus au ryle a dit que ce possible mais il y a toujour un mais.
Code:
this.options[this.selectedIndex].value
(this.value marche aussi, mais n'est pas toujours compatible avec tous les navigateurs)
Merci quand meme

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 oct. 2006, 14:00

Lesquels ses navigateurs/javascript qui ne connaissent pas "this.value" quand c'est appliqué pour une balise supportant l'attribut "value" ?
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 oct. 2006, 14:49

Le problème c'est que la balise select ne supporte pas l'attribut value, ce sont ses options qui en bénéficient. L'usage de "this.value" pour récupérer la valeur d'un select est toléré et correctement interprété par la plupart des navigateurs, mais la syntaxe est incohérente et du coup ça ne fonctionnait pas partout (genre chez NS)

Et puis ca fait pas de mal d'utiliser le tableau d'options, surtout le jour où il faut gérer un select "multiple" et où le this.value n'aura aucun sens :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...