Page 1 sur 1

javascript dans onclick et Mozilla 1.7.3

Publié : 19 oct. 2004, 14:14
par dd32
Bonjour à tous,

SITUATION :
J'ai développé un site entièrement dynamique où je redéfinis même les boutons avec une fonction PHP nommée bouton().

Code : Tout sélectionner

<?php
function bouton($texte, $valeur){
   $html = "<a href =\"#\" onclick=\"bouton.value='$valeur';submit();\">$texte</a> \n";
   return $html;
}
?>
PROBLEME :
On voit bien qu'il y a deux instructions après "onclick=".
Jusqu'à présent avec IE 6 et les versions antérieures à 1.7.3 de Mozilla, les boutons ainsi créés fonctionnaient correctement.
Après l'installation de Mozilla 1.7.3, les boutons étaient inactifs et il a fallu trouver une solution.

SOLUTION :
J'ai remplacé

Code : Tout sélectionner

onclick=\"bouton.value='$valeur';submit();\"
par

Code : Tout sélectionner

onclick=\"fct_bouton('$valeur')\"
et j'ai défini la fonction fct_bouton EN JAVASCRIPT comme ceci :

Code : Tout sélectionner

function fct_bouton(valeur){
   document.forms[0].bouton.value=valeur;
   document.forms[0].submit();
}

BREF, la même chose qu'avant à part que je stocke les deux instructions dans une fonction. Ce qui fait que je n'ai plus qu'une seule instruction après le "onclick=".

Encore faut-il deviner l'astuce ;-)

Je n'ai pas encore trouvé quelqu'un qui parlait de ce problème. Peut-être est-ce mon ignorance car je n'utilise pas souvent Mozilla (mais cela ne le faisait pas dans la version antérieure !)

Maintenant cela fonctionne sous IE 6 et Mozilla 1.7.3.

http://www.carnetdepeche.com/prixmatos/go.php
(la barre des menus contient des boutons construits de cette façons)

Suis-je obligée de changé tout mon code comme l'exemple si dessus ou bien est-ce possible de mettre plusieurs instructions javascript après "onclick" avec Mozilla ??
Si quelqu'un sait...
Merci !

Publié : 19 oct. 2004, 14:19
par calimo
Le problème que je vois c'est que ça nécessite obligatoirement l'activation du javascript ce qui n'est pas évident partout, alors que pour faire un bouton de soumission un <input type="submit" onclick="bouton.value='$valeur'" value="$texte" /> est plus recommandé :roll:

Publié : 19 oct. 2004, 15:15
par Invité
En fait, je n'ai pas décidé la structure de l'appli. Ce n'est pas un site web dynamique "simple" je dirais :?

Le truc c'est qu'il n'y a qu'un seul formulaire construit dynamiquement et c'est sûrement pour cette raison qu'il a été décidé de faire des boutons en "<a href>".

Malheureusement pour moi je ne peux pas mettre d'<input> ou en tous cas, je ne vois pas comment vu la structure l'appli...

En plus, je croyais que c'était pas grave car j'ai trouvé la parade en remplaçant des instructions javascript par une fonction mais le problème c'est que je construis aussi d'autres type de boutons qui ne sont pas des "<a href>" mais des "<a href><img src></a>" et là ça se corse. (je vais aussi devoir modifier la façon d'exécuter le javascript sur le onclick)

(exemple je liste des enregistrements et au bout de chaque ligne d'enregistrement se trouve une image "crayon/modifier" qui fait office de bouton Submit !)

Publié : 19 oct. 2004, 15:21
par dd32
calimo a écrit :Le problème que je vois c'est que ça nécessite obligatoirement l'activation du javascript ce qui n'est pas évident partout...
Ah ? y a-t-il une explication car mon code fonctionnait nickel avec la version précédente de Mozilla. :shock:
Ce n'est pas que je veuille me prendre la tête mais le webmaster en titre pour ce site préfère que ce soit compatible avec sa version de Mozilla. :cry:

Publié : 19 oct. 2004, 16:02
par calimo
Ce que je voulais dire c'est qu'avec ce code, indépendamment de Mozilla, certaines personnes (les 10% d'internautes qui n'ont pas Javascript activé - source) ne pourront rien en faire du tout. Rien à voir avec Mozilla.

Par contre je n'ai pas entendu parler de régression de ce genre. Et c'est d'ailleurs assez bizarre... il y a une page en ligne pour vérifier ça ?
Il n'y a pas d'erreur(s) dans la console javascript ?

Publié : 19 oct. 2004, 16:48
par dd32
Je ne trouve pas grand chose sur le sujet et je n'utilise pas souvent Mozilla pourtant j'aime bien mais les personnes que j'aide ou pour qui je bosse ont majoritairement IE :?

Résultat, je n'ai pas vu dans les forums que j'ai visité, ce genre de sujet abordé.

Je suis d'accord pour les 10% qui zappe le javascript mais ce qui m'importe pour l'instant ("égoïste, va !") c'est que la personne pour qui je dois développer l'appli puisse voir qu'elle fonctionne et il a Mozilla 1.7.3.
(D'autre part, les gens qui utiliseront l'appli sont prévenus à l'avance qu'il y a des pop ups et du javascript dans l'appli qu'ils vont utiliser.)

J'imagine le truc, si à chaque mise à jour ou nouvelle version de Mozilla, je dois recoder toute mon appli !
(et pourtant je l'ai rédigé de façon à pouvoir la modifier facilement)

Y a-t-il un endroit où j'ai plus de chance de trouver une éventuelle réponse à mon problème ?

Je suis naturellement prête à en dire plus sur la structure de mon appli s'il le faut.

Merci pour tout :wink:

Publié : 19 oct. 2004, 17:31
par dd32
Finalement, je ne devais pas avoir si bien cherché que cela.
Si je n'ai rien trouvé concernant mon problème c'est sans doute que mon problème n'en est pas vraiment un :lol:

D'après d'autres forums : IE laissent pratiquement tout passer y compris les "instructions javascript douteuses" au niveau syntaxe.
Mozilla 1.7.3 par rapport à ses versions antérieures doit bien surveiller le code javascript (ou en tous cas davantage qu'IE).

Si bien que mon vilain code :

Code : Tout sélectionner

onclick=\"bouton.value='$valeur';submit();\"
ne fonctionnait pas

mais

Code : Tout sélectionner

onclick=\"document.forms[0].bouton.value='$valeur';document.forms[0].submit();\"
lui fonctionne sous IE et Mozilla 1.7.3.

D'où l'explication : quand je remplaçais :

Code : Tout sélectionner

onclick=\"bouton.value='$valeur';submit();\"
par une fonction :

Code : Tout sélectionner

onclick=\"fct_bouton('$valeur')\"
définit ainsi :

Code : Tout sélectionner

function fct_bouton(valeur){
   document.forms[0].bouton.value=valeur;
   document.forms[0].submit();
}
cela fonctionnait.

Bref, lorsque que j'écrivais mon code javascript dans l'événement "onclick" de mon bouton "<a href="..." onclick="...">", il ne fallait pas que j'oublie "document.forms[0]." avant l'élément sinon l'élément reste inconnu pour le navigateur (logique !)

J'suis en train de chercher un trou de souris pour y passer l'hiver :oops:

Sorry Calimo