Javascript et mozilla/firefox

Résolu
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   -  
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai une page dans laquelle, j'utilise un javascript qui fonctionne parfaitement sous IE mais dès que je le teste sur Firefox, il ne fonctionne plus.

<select name="userid" onChange="document.location.reload('mapage.php?userid='+userid.value+'');">
		<option value="0">-- Sélectionner un utilisateur --</option>
		<option value="1" >Utilisateur 1</option>
		<option value="2" >Utilisateur 2</option>
		<option value="3" >Utilisateur 3</option>
		<option value="4" >Utilisateur 4</option>
</select>


Lorsque je le teste, cela n'a pas l'air de fonctionner sous firefox.

Merci pour votre aide
A voir également:

22 réponses

nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   113
 
ne serait-ce pas mieux comme ça ?

<select name="userid" onChange="document.location='test.php?userid='+this.value;">
		<option value="0">-- Sélectionner un utilisateur --</option>
		<option value="1" >Utilisateur 1</option>
		<option value="2" >Utilisateur 2</option>
		<option value="3" >Utilisateur 3</option>
		<option value="4" >Utilisateur 4</option>
</select>
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Exact

Où encore


<select name="userid" id="userid" onChange="alert('mapage.php?userid='+document.getElementById('userid').value);">
		<option value="0">-- Sélectionner un utilisateur --</option>
		<option value="1" >Utilisateur 1</option>
		<option value="2" >Utilisateur 2</option>
		<option value="3" >Utilisateur 3</option>
		<option value="4" >Utilisateur 4</option>
</select>



lorsque tu cherches à reférencer un élément en Javascript ne te base pas sur l'attribut name
A la place donne un identifiant unique via l'attribut id (ex id="userid").
Ensuite pour récupérer une référence sur cet élément en JS il suffit de faire
document.getElementById("nom_de_l_element") ex document.getElementById('userid')
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci de ta réponse,

Je viens d'essayer mais cela donne la même chose.

Cela fonctionne sous IE mais pas sous firefox.
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Tu dois avoir commis une erreur car les 2 méthodes sont parfaitement valables surtout que celle de nEm3sis est simple elle fonctionne chez moi. La seule difficulté ici étant de bien comprendre ce que représente this :-)

Charge ta page sous FF test ton select puis va dans [Outils] [Console d'erreurs] : FF doit t'afficher ce qui ne va pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   113
 
il y a un bug quand je fais copier coller les 2 codes
sur le mieu un tiret (-) vien se mettre au milieu de value
et sur celui de PHP le tiret (-) vient se mettre au mileu de getElementById

si ton problème est le meme que le mien suffit de supprimer ce tiret et ça marche
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Ah oui c'est vrai ! depuis quelques temps le forum prend certaines libertés avec les codes en introduisant des caractères fantaisistes ! Avis au webmaster
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
En fait,

Ce n'est pas un problème de copier/coller puisque cela marche en partie. Lorsque je change l'utilisateur, avec getElementByid sur IE comme sur Firefox, il affiche bien la bonne ligne mais il semble qu'il n'arrive plus à comprendre :

 if ($userid!="") {


C'est comme si il n'arrivait plus à associer userid avec $userid mais dès que je remets '+userid.value+', tout refonctionne sous IE.
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
C'est un autre problème là ...

Donne le code complet de ta page

0
nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   113
 
tu pourrais montrer ton code ?
parce que userid c'est du html/javascript et $userid c'est du php
et tu ne dis pas comme tu passe de l'un a l'autre
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Ouais c'est pas faux ! ;-)
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Ouais OK, je vous le mets en intégral

J'ai une page en php qui m'affiche la conf par individus (genre de cartographie)

en entête, j'ai 2 SQL:


// recuperation de la liste des individus pour l'afficher dans la liste déroulante
$sSQL="SELECT fjs_inus_id, fjs_inus_nom, fjs_inus_prenom FROM tjs_internal_user WHERE 
fjs_inus_actif='1' AND fjs_inus_nom <> 'Generique' ORDER BY fjs_inus_nom, fjs_inus_prenom";
$q->query($DB,$sSQL);


if ($userid!="") {

// récupération du matériel de niveau N et affichage de celui-ci
$sSQL1="SELECT fjs_ci_id, fjs_citype_libelle, fjs_citype_img, fjs_ci_libelle, fjs_ci_societe, fjs_ciexploit_libelle,
 fjs_ci_description, fjs_ci_serialnumb, fjs_ci_adresseip, fjs_ci_datereception FROM tjs_ci, tjs_ci_type,
 tjs_ci_owner, tjs_ci_exploit WHERE fjs_ci_userid='$userid' AND fjs_ci_ownerid=fjs_ciowner_id 
AND fjs_ci_stateid <= '4' AND fjs_ciexploit_id=fjs_ci_version 
AND fjs_citype_id=fjs_ci_type AND fjs_ci_id=fjs_ci_parent AND 
fjs_citype_id <> 'Consommable' ORDER BY fjs_citype_libelle DESC";
$q->query($DB,$sSQL1);
$row=$q->getrow();
$ciid=$row[0];
}


Dans le corps du message, j'ai ma liste déroulante et lorsque je clique sur le nom d'une personne, la conf s'affiche en dessous

<form name="user">
<? $q->query($DB,$sSQL); ?>

<span class="titre2"><b>Voir la configuration de :&nbsp;&nbsp;&nbsp;</b></span>

<select name="userid" onChange="document.location.reload('/config_individus.php?
userid='+document.getElemen­tById('userid')+' ');">
<option value="0">-- Sélectionner un utilisateur --</option>
<? if ($q->numrows()) {
	$row=$q->getrow();
		while ($row) { ?>
<option value="<? echo $row[0] ?>" <? if ($row[0]==$userid) {?>SELECTED<? } ?>>
<? echo $row[2] ?> <? echo $row[1] ?></option>
		<? $row=$q->getrow();
			}
		} ?>
	</select>
</form>
</div>


Eh bien voila, avec '+userid.value+', cela marche sans problème sous IE et pas sous Firefox. Avec "document." ou "user." cela ne fonctionne pas sur les 2 navigateurs pourtant, il sélectionne la bonne ligne.

Merci de votre aide
0
nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   113
 
tu met if ($userid!="") {
mais cette variable n'est pas définie avant ...

de plus quand tu met config_individus.p­hp?userid=
ça correspond a la varialbe $_GET[userid'] et je ne te voit pas l'utiliser
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Oui

En plus il manque .value après document.getElemen­tById('userid')
Et l'espace à la fin n'est pas utile



Tu utilises quelle version de php ?
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Pour la définition des variables, cela se trouve dans le fichier de conf qui est en include mais que je n'ai pas intégré au code placé ici. Cela fonctionne très bien sur IE pour tous le site et si je rajoute
$_GET['userid'];

dans la page cela ne fonctionne pas mieux.

Avec value en plus, cela refonctionne sous IE mais cela me sort un message d'erreur suivant sous Firefox:

Erreur : document.getElementById("userid") has no properties
Fichier source : http://localhost/support/config/config_individus.php
Ligne : 1


Alors que si j'affiche la source, il y a bien

<select name="userid" onChange="document.location.reload('/support/config/config_individus.php?
userid='+document.getElementById('userid').value+'');">
0
nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   113
 
et en mettant comme j'ai mis plus haut avec this ?
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
On revient en arrière, la ligne de l'utilisateur n'est même pas sélectionné.
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606 > JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention  
 
je me demande bien pourquoi j'écris ! lol
qu'est-ce que j'ai écrit à propos de getElementById() ? que comme son nom l'indique ça recherche un élément par son ID dans la page HTML : donc dans ta balise <select ....> tu dois ajouter en plus l'attribut id="userid"

Ex <select name="userid" id="userid" ...> Ca fonctionne sous IE car il utilise l'attribut name lorsque id n'est pas défini

0
nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   113 > JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention  
 
sauf que si c'est pas sélectionné c'est pas a cause du this comme j'ai mis dans le code plus haut c'est a cause de ton code php
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5 > nEm3sis Messages postés 710 Date d'inscription   Statut Membre Dernière intervention  
 
$_Get, voir ticket 14 et pour $userid, c'est normal qu'il n'est pas défini avant puisque la page est sensée se recharger avec une valeur à userid, correspondant à l'identifiant de l'utilisateur.
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Si je rajoute id="userid", je n'ai plus le message d'erreur mais rien de plus ne se passe
et l'utilisateur n'est plus sélectionné.
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Je viens de trouver ca sur le site de mozilla :

Il ne suffit pas de créer un élément et de lui assigner un ID pour le rendre accessible par getElementById. Pour cela, il est nécessaire d'insérer l'élément dans l'arbre du document avec insertBefore ou une méthode similaire, par exemple dans un élément DIV invisible.

var element = document.createElement("div");
element.id = 'testqq';
var el = document.getElementById('testqq'); // e vaudra null !


Mais je ne comprend pas tout...
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Non ça c'est lorsque tu manipules l'arbre DOM (la page HTML une fois chargée en mémoire par le navigateur constitue un arbre assez complexe qui contient tous les éléments de la page : chaque élément est en fait un objet) dynamiquement c'est-à-dire quand tu ajoutes par ex par programmation en Javascript des éléments qui n'ont pas été définie explicitement dans le code HTML au départ.
A la limite tu pourrais avoir une page complètement vide et tout créer par programmation : ce que personne ne fait bien sûr car c'est bcp trop compliqué.

0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Ce qui est marrant c'est qu'il comprend bien $userid parce que grace à
<? if ($row[0]==$userid) {?>SELECTED<? } ?>>

Il sélectionne bien le bon utilisateur mais si je fais un <? echo $userid ?>, il n'affiche rien
0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
C'est normal, il ne rechargeait pas la page. Mais même lors du rechargement, <? echo $userid ?> ne s'affiche
toujours pas. C'est comme s'il ne transmettait pas la valeur de userid.
0
PhP Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   606
 
Pour voir le contenu des variables reçues par php insère ce code dans ta balise <body> :

<?php
echo "<pre>";
var_dump($_GET);
echo "</pre>";
?>



Ceci te permettra de déboguer un peu plus facilement


0
JB_A Messages postés 301 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci pour ton code pour debugger.

Lorsque je l'insére dans la page, que je la charge avec IE et que je sélectionne un utilisateur, cela donne :

array(1) {
  ["userid"]=>
  string(2) "82"
}


Par contre avec Firefox, j'obtiens :

array(0) {
}


J'ai vérifié mon code et j'ai bien inséré en plus :
$userid=$_GET[userid];


Mais cela ne change rien, j'ai même essayé avec $_POST au lieu de $_GET, j'ai bien vérifié que la "method" du formulaire était bien adaptée (soit get soit post).

La solution pourrait peut-être d'au lieu de recharger la page (Load) avec un onChange, il faudrait peut-être
envoyer les données avec un submit.

C'est pourquoi, je l'ai changé en :

onChange="document.utilisateur.submit();"


Et la, cela marche sans problème que ce soit sous IE ou sous Firefox.
0