Page 1 sur 1

Fonction qui ne marche pas sous FireFox

Posté : 16 nov. 2006, 12:08
par Ish
Bonjour à tous,

j'ai un petit probleme dans mon code. J'ai une application web que je dois débugger pour l'adapter à FireFox.
Elle marche nickel-chrome sur IE mais une fois passée sous FireFox il ya un bug que je n'arrive à résoudre !!

Code : Tout sélectionner

// SI UN SITE ET UNE USINE sont sélectionnés if ((Trim(window.frames['Menu'].FMenu2.saisieSite.value)!="")&&(Trim(window.frames['Menu'].FMenu2.saisieUsine.value)!="")) { ....
En fait cela me met un message d'erreur
" Message d'erreur :
window.frames.Menu.FMenu2 has no propreties
"

Pourquoi est-ce que cela fonctionne parfaitement sous IE et pas sous FireFox .. c'est ce que j'arrive pas à comprendre mais si je sai que sous FireFox les régles de codage doit bien être respecté, mais j'ai pas l'impression de mal faire, vu que cela marche sous IE !!

Si qqun avait la solution, je l'en remercie d'avance !! :wink:

Posté : 16 nov. 2006, 12:25
par Ish
je me suis rendu compte que je ne vous avez pas assez mis de code pour comprendre le truc alors voici

Code : Tout sélectionner

function generer() { wEcwUI.clearMessage(); var req; req = "false"; // SI UN SITE ET UNE USINE sont sélectionnés if ((Trim(window.frames['Menu'].FMenu2.saisieSite.value)!="")&&(Trim(window.frames['Menu'].FMenu2.saisieUsine.value)!="")) { req="select * from("; // SI UN PI - S/P est renseigné if ((Trim(window.frames['Menu'].FMenu2.saisiePI.value)!="")||(Trim(window.frames['Menu'].FMenu2.saisieSP.value)!="")) { if ((Trim(window.frames['Menu'].FMenu2.saisiePI.value)!="")&&(Trim(window.frames['Menu'].FMenu2.saisieSP.value)!="")) req += "Select A.PINCOD as PINCOD,A.PINPI1 as PINPI1,A.INSCOD as INSCOD, A.PINPI2 as PINPI2, A.PINNOM as PINNOM, A.PINDSL as PINDSL, A.FPICOD as FPICOD, A.PINNGE as PINNGE, A.PINDMJ as PINDMJ, A.LGECOD as LGECOD , A.HGECOD as HGECOD , C.CGECOD as CGECOD froM SDWI.SDNQTOPI A, SDWI.SDNQTOHC C where A.PINDFV is null and C.HCEDTF is null and C.PINCOD=A.PINCOD and C.INSCOD=A.INSCOD and A.INSCOD='"+window.frames['Menu'].frm.elements['SiteHI2'].value+"' and A.PINPI1='"+Trim(window.frames['Menu'].FMenu2.saisiePI.value.toUpperCase())+"' and A.PINPI2='"+window.frames['Menu'].FMenu2.saisieSP.value.toUpperCase()+"' "; else if ((Trim(window.frames['Menu'].FMenu2.saisiePI.value)=="") && (Trim(window.frames['Menu'].FMenu2.saisieSP.value)!="")) req += "Select A.PINCOD as PINCOD,A.PINPI1 as PINPI1,A.INSCOD as INSCOD, A.PINPI2 as PINPI2, A.PINNOM as PINNOM, A.PINDSL as PINDSL, A.FPICOD as FPICOD, A.PINNGE as PINNGE, A.PINDMJ as PINDMJ, A.LGECOD as LGECOD , A.HGECOD as HGECOD , C.CGECOD as CGECOD froM SDWI.SDNQTOPI A, SDWI.SDNQTOHC C where A.PINDFV is null and C.HCEDTF is null and C.PINCOD=A.PINCOD and C.INSCOD=A.INSCOD and A.INSCOD='"+window.frames['Menu'].frm.elements['SiteHI2'].value+"' and A.PINPI2='"+window.frames['Menu'].FMenu2.saisieSP.value.toUpperCase()+"'"; else if ((Trim(window.frames['Menu'].FMenu2.saisiePI.value)!="") && (Trim(window.frames['Menu'].FMenu2.saisieSP.value)=="")) req += "Select A.PINCOD as PINCOD,A.PINPI1 as PINPI1,A.INSCOD as INSCOD, A.PINPI2 as PINPI2, A.PINNOM as PINNOM, A.PINDSL as PINDSL, A.FPICOD as FPICOD, A.PINNGE as PINNGE, A.PINDMJ as PINDMJ , A.LGECOD as LGECOD , A.HGECOD as HGECOD , C.CGECOD as CGECOD froM SDWI.SDNQTOPI A, SDWI.SDNQTOHC C where A.PINDFV is null and C.HCEDTF is null and C.PINCOD=A.PINCOD and C.INSCOD=A.INSCOD and A.INSCOD='"+window.frames['Menu'].frm.elements['SiteHI2'].value+"' and A.PINPI1='"+Trim(window.frames['Menu'].FMenu2.saisiePI.value.toUpperCase())+"'"; window.frames['Menu'].FMenu2.saisieNom.value=""; } ....
voila ... donc cela vient surement window.frames['Menu'].FMenu2 mais je ne vois pas bien en quoi il y a une probleme vu que cela fonctionne sous Internet Explorer !!

Posté : 16 nov. 2006, 12:55
par Ryle
Ne faudrait-il par remonter d'un niveau pour disposer de l'objet frames[] ? celui ci doit être défini pour la fenêtre qui défini les cadres et non pas depuis l'un cadre qui n'a, à priori aucune visibilité dessus...

j'essayerais comme ceci :

Code : Tout sélectionner

window.parent.frames[]
Sinon faudrait aussi que tu nous donnes la structure de tes frames..

A noter que les soucis entre IE/FF ont plus leur place dans les forum HTML ou JS, que dans celui de PHP qui vit une vie paisible sur son serveur, loin des tracas des navigateurs du client ;) (Si jamais notre zélé modérateur aux chevilles enflées, ou même un autre, passe dans le coin... :))

Posté : 16 nov. 2006, 13:17
par Ish
Ne faudrait-il par remonter d'un niveau pour disposer de l'objet frames[] ? celui ci doit être défini pour la fenêtre qui défini les cadres et non pas depuis l'un cadre qui n'a, à priori aucune visibilité dessus...

j'essayerais comme ceci :

Code : Tout sélectionner

window.parent.frames[]
Sinon faudrait aussi que tu nous donnes la structure de tes frames..

A noter que les soucis entre IE/FF ont plus leur place dans les forum HTML ou JS, que dans celui de PHP qui vit une vie paisible sur son serveur, loin des tracas des navigateurs du client ;) (Si jamais notre zélé modérateur aux chevilles enflées, ou même un autre, passe dans le coin... :))
Ok ok ... je tacherais de faire attention !!! Ou est-ce que tu pourrais déplacer mon sujet sur le topic de Javascript

Posté : 16 nov. 2006, 13:21
par Ryle
Oulah non... je laisse ça aux modérateur, je risquerais de me faire mal à mon p'tit dos :)

Mais à la limite, ce qui m'interesse plus c'est de savoir si tu as essayé, et si ça fonctionne ;)

Posté : 16 nov. 2006, 13:30
par Cyrano
...est-ce que tu pourrais déplacer mon sujet sur le topic de Javascript
C'est fait.

Posté : 16 nov. 2006, 14:36
par Ish
En fait je ne vois pas bien ce que tu veux dire par :
remonter d'un niveau pour disposer de l'objet frames[]

Le truc c'est que sous-firefox, il ne veut pas rentrer dans la boucle !!!

Code : Tout sélectionner

if ((Trim(window.parent.frames['Menu'].FMenu2.saisieSite.value)!="")&&(Trim(window.prent.frames['Menu'].FMenu2.saisieUsine.value)!="")) { ..... ..... ..... else {wEcwUI.setMessage("W","Sélectionnez un site et une usine.");}
En fait j'ai une page qui est un tableau (normale) ou j'ai deux frames une avec mes 4 listes déroulantes liés (qui marche impécable) et l'autre ou s'affiche le résultat (en plein millieu de la page) !!
En bas de ma page, j'ai réalisé une petite fonction javascript qui regarde si les listes on été remplie ou pas. Si les deux premiers champs n'ont pas été remplie et que l'on valide le tout cela doit afficher (en bas de page) "Selectionnez un site et une usine"
Mais quand je sélectionne les 4 champs, cela me met toujours qu'il faut que je choisisse " un site et une usine " ...
Cela veut dire que elle ne passe pas dans la fonction !!
j'ai regardé sur les propriété de la page et les argument du site et de l'usine sont bien là !!

Posté : 16 nov. 2006, 16:24
par Ish
Je relance ... au cas où quelqu'un aurait une idée !! ... :wink:

Je me suis renseigné un peu partout sur le net et j'ai eu vent que les frames ne marchait pas sous FireFox ... est-ce vrai ??

Posté : 17 nov. 2006, 12:59
par Ryle
En fait je ne vois pas bien ce que tu veux dire par :
remonter d'un niveau pour disposer de l'objet frames[]
En fait, le DOM (Document Object Model) en javascript, fonctionne un peu comme du xml voire un systeme de fichier : tu pars de ta fenêtre, tu descend dans un formulaire, puis dans un champ pour en lire la valeur. Tu peux aussi partir d'un champ et remonter vers son formulaire pour en connaître le nom par exemple.

Je ne sais pas si ton problème vient de là, mais ce que je me disais, c'est que la page où est ton script ne connait en théorie pas les frames, puisque celles-ci sont définies dans une autre page qui a ouvert celle-ci. Je suggerais donc de "remonter" au niveau de la page parente avec l'élément "parent" pour être sur de trouver le tableau frames[]. Tu devrais alors pouvoir faire appel à la frame nomée Menu, puis à son formulaire, etc.

A noter une petite erreur de syntaxe dans ton test :

Code : Tout sélectionner

if ((Trim(window.parent.frames['Menu'].FMenu2.saisieSite.value)!="")&&(Trim(window.prent.frames['Menu'].FMenu2.saisieUsine.value)!=""))
Il manque le A dans le deuxième window.pArent :)

essaye également de placer des alert pour tester tes éléments un par un :
alert(window.parent.frames['Menu']); // s'il retourne "undefined" c'est que la frame n'est pas trouvée
alert(window.parent.frames['Menu'].FMenu2); // s'il retourne "undefined" c'est que c'est le formulaire qu'il ne voit pas
alert(window.parent.frames['Menu'].FMenu2.saisieSite); // ici le champ, 
...

Posté : 17 nov. 2006, 14:49
par Ish
Merci Ryle !!

J'avais vu l'erreur de syntaxe avec "pArent" !! :wink:

En effet, c'est très bête, l'utilisation des alert() permet de voir d'ou vient l'erreur !
Donc il reconnait bien la Frame, par contre le probeme se situe au niveau du formulaire (qu'il ne voit donc pas !)

Encore une fois, je perd un peu les pédales car le codes marches nickel-chrome sous Internet Explorer. Est-ce que le problème viendrait de la non fermeture d'un balise ou d'un bout de code pas bien écrit !!!

Bizarre bizarre ... mais je ne desespère pas ! 8)

Posté : 17 nov. 2006, 15:37
par Ish
JE viens de touver l'erreur pour la compatibilité FireFox !!

il faut remplacer :

Code : Tout sélectionner

window.frames['Menu'].FMenu2
par

Code : Tout sélectionner

window.parent.frame['Menu'].document.forms['FMenu2
Voila donc c'est mon formulaire que je devais renseigner !!!