Problème liste déroulante

Petit nouveau ! | 5 Messages

13 juin 2007, 11:52

Bonjour,
Je voudrais vous soumettre le problème qui m'occupe depuis deux jours: Tout d'abord mes connaissances sont très faible en PHP et nulle en javascript. On m'a demandé de jeter un petit coup d'oeuil sur un script qui ne fonctionne pas correctement. Ce script a été créé par une personne qui a maintenant quitté la société. En fait ce a partir d'une page PHP lorsque l'on clique sur un élément affiché, une liste déroulante s'affiche (liste gérée en javascript) et la personne peut sélectioner l'une des valeurs. Voici un example de ce que cela donne:
Image
Or pour certaines personnes ils arrivent a sélectionner la liste déroulante mais la souris ne permet pas de valider un choix (dans l'example suivant, la souris est sur P1:
Image
Si par example pour ces personnes en même temps que je clique sur l'élément, j'appuye sur la flêche down, alors ca marche :evil: . Ca dépend vraiment du profile et non lié au PC car j'ai essayé sur le même PC avec différents profiles.

A partir de là j'ai comparé les profiles mais je n'ai rien trouvé qui expliquerai ce phénomène. D'où l'idée de modifier le script java.

Voici dans mon code PHP l'appel du script java:
$this->html .= "<td WIDTH=\"10\" style=\"$style\" bgcolor=\"$color\">
<span onclick=\"form_change(this)\" id=\"".$unique_field.",$id,".$str -> name .",
$this->table,$this->database\">" . $value . "</span>
</td>\n";
Et voici la partie javascript:

Code : Tout sélectionner

function form_change(obj) { var txt = obj.innerHTML; var type = obj.type; var id = obj.id; var test = id.split(","); var kol = test[2]; switch (kol) { case "Priority" : var t = "<select>"; t+="<option value='P4'>P4</option>"; t+= "<option value='P3'>P3</option>"; t+= "<option value='P2'>P2</option>"; t+= "<option value='P1'>P1</option>"; t+= "<option value='P0'>P0</option>"; t+= "</select>"; break; } obj.innerHTML= t; document.getElementById(new_id).focus(); document.getElementById(new_id).select(); }
J'ai bien évidemment essayer de changer le script java avec ce que je pouvais trouver sur ce site et dans d'autre sans succès (mes connaissances étant nulle en JAVASCRIPT et limitées PHP :( )

Si quelqu'un pourrais me dire ce qui ne va pas ou bien ce que je dois modifer pour le faire fonctionner cela me rendrai service (Ne pas oublié que je ne suis pas un expert en PHP ni en javascript)

Merci d'avance
Modifié en dernier par lcaufrie le 14 juin 2007, 08:13, modifié 1 fois.

ViPHP
ViPHP | 5924 Messages

13 juin 2007, 15:14

(mes connaissances étant nulle en JAVA et limitées PHP :( )
http://www.phpfrance.com/forums/voir_sujet-5901.php
Ca fait mal de voir que certains confondent java et js :-/

Invité
Invité n'ayant pas de compte PHPfrance

14 juin 2007, 08:11

Bonjour,
Je voudrais vous soumettre le problème qui m'occupe depuis deux jours: Tout d'abord mes connaissances sont très faible en PHP et nulle en javascript. On m'a demandé de jeter un petit coup d'oeuil sur un script qui ne fonctionne pas correctement. Ce script a été créé par une personne qui a maintenant quitté la société. En fait ce a partir d'une page PHP lorsque l'on clique sur un élément affiché, une liste déroulante s'affiche (liste gérée en javascript) et la personne peut sélectioner l'une des valeurs. Voici un example de ce que cela donne:
Image
Or pour certaines personnes ils arrivent a sélectionner la liste déroulante mais la souris ne permet pas de valider un choix (dans l'example suivant, la souris est sur P1:
Image
Si par example pour ces personnes en même temps que je clique sur l'élément, j'appuye sur la flêche down, alors ca marche :evil: . Ca dépend vraiment du profile et non lié au PC car j'ai essayé sur le même PC avec différents profiles.

A partir de là j'ai comparé les profiles mais je n'ai rien trouvé qui expliquerai ce phénomène. D'où l'idée de modifier le script java.

Voici dans mon code PHP l'appel du script java:
$this->html .= "<td WIDTH="10" style="$style" bgcolor="$color">
<span onclick="form_change(this)" id="".$unique_field.",$id,".$str -> name .",
$this->table,$this->database">" . $value . "</span>
</td>\n";
Et voici la partie javascript:

Code : Tout sélectionner

function form_change(obj) { var txt = obj.innerHTML; var type = obj.type; var id = obj.id; var test = id.split(","); var kol = test[2]; switch (kol) { case "Priority" : var t = "<select>"; t+="<option value='P4'>P4</option>"; t+= "<option value='P3'>P3</option>"; t+= "<option value='P2'>P2</option>"; t+= "<option value='P1'>P1</option>"; t+= "<option value='P0'>P0</option>"; t+= "</select>"; break; } obj.innerHTML= t; document.getElementById(new_id).focus(); document.getElementById(new_id).select(); }
J'ai bien évidemment essayer de changer le script java avec ce que je pouvais trouver sur ce site et dans d'autre sans succès (mes connaissances étant nulle en JAVASCRIPT et limitées PHP :( )

Si quelqu'un pourrais me dire ce qui ne va pas ou bien ce que je dois modifer pour le faire fonctionner cela me rendrai service (Ne pas oublié que je ne suis pas un expert en PHP ni en javascript)

Merci d'avance

Petit nouveau ! | 5 Messages

14 juin 2007, 08:14

(mes connaissances étant nulle en JAVA et limitées PHP :( )
http://www.phpfrance.com/forums/voir_sujet-5901.php
Ca fait mal de voir que certains confondent java et js :-/
Désolé c'est corrigé. Par contre une suggestion pour faire fonctionner mon script serait la bienvenue

Mammouth du PHP | 568 Messages

14 juin 2007, 12:37

Yop,

je pense que c'est du au Onclick de ton <span>,

tu a beau remplacer le contenu HTML de ton span, l'évènement onClick, lui est toujours présent.

Et donc a chaque fois que tu veux cliquer à l'intérieur de la zone, elle est réécrite par le select, empâchant par la même occasion la sélection.

Qu'en pensez-vous?

Petit nouveau ! | 5 Messages

14 juin 2007, 13:07

Dans ce cas ca ne marcherai pas avec tous les profiles?


Y a t'il moyen d'essayer autre chose en place du onclick?

Mammouth du PHP | 568 Messages

14 juin 2007, 14:25

Bon je vien de tester et effectivement c'est ce que je te disait, tu ne peux utiliser la liste car elle est régénérer à chaque click dessus (car en fait le onclick du span est appelé à chaque fois).

Résolution du problème, en quelques mots il faut que tu passe à ta fonction Javascript la valeur de la cellule, et dans ta fonction il te suffit de vérifier si le contenu de ta cellule est = à la valeur de la cellule, à ce moment la tu peux modifier le contenu de ton span.

Plus que des mots du code ^^, j'ai synthétisé la chose en plus facile.

LE JAVASCRIPT
<script>
	function form_change(valeur,id)
	{
		if(document.getElementById(id).innerHTML == valeur)
		{
			 switch (id)
			 {
					case "Priority" :
						 var t = "<select>";
						 t+="<option value='P4'>P4</option>";
						 t+= "<option value='P3'>P3</option>";
						 t+= "<option value='P2'>P2</option>";
						 t+= "<option value='P1'>P1</option>";
						 t+= "<option value='P0'>P0</option>";
						 t+= "</select>";
					 break;
			 }         
			document.getElementById(id).innerHTML = t;
		}
	} 
</script>
L'HTML/PHP
<table>
	<tr>
		<td WIDTH="10" style="" bgcolor="" id="Priority" onclick="form_change('valeur',this.id);">valeur</td>
	</tr>
</table>

Petit nouveau ! | 5 Messages

15 juin 2007, 16:19

Merci beaucoup pour ta réponse je vais changer mon code et voir le résultat :P

Petit nouveau ! | 5 Messages

18 juin 2007, 11:32

Yosh:
Bon voilà le résultat après modification des scripts. Ca fonctionne mieux pour la partie du menu qui ne permettai pas de choisir une option avec certains profiles. Par contre maintenant ce que j'ai comme problème c'est que je n'arrive plus a sélectionner une autre valeur après une première modification:
Résolution du problème, en quelques mots il faut que tu passe à ta fonction Javascript la valeur de la cellule, et dans ta fonction il te suffit de vérifier si le contenu de ta cellule est = à la valeur de la cellule, à ce moment la tu peux modifier le contenu de ton span.
En fait comme je teste sur la valeur qui est dans la table et qu'elle n'est pas rafraichie, le script ne passe plus dans le test
if(document.getElementById(id).innerHTML == valeur) 
Après encore pas mal de test je viens d'y arriver en rajoutant dans le code javascript de sauvegarde du record:

Code : Tout sélectionner

window.setTimeout("window.location.reload()",1000);
Merci encore a toi Yosh