Aller au contenu

Un nom d'ancre peut perturber un formulaire


jphicath

Sujets conseillés

Bonjour à tous,

juste un message qui pourra peut-être servir à quelqu'un qui a le même comportement incompréhensible que moi sur une page...

Je suppose que c'est déjà connu de beaucoup d'entre vous, mais comme j'ai galéré pour comprendre, je signale ce "bug" aux débutants (comme moi).

Voilà :

Supposons que vous ayez un formulaire, avec à un endroit, une commande javascript qui se lance, par exemple Onclick ou OnSubmit pour vérifier l'intégrité des données. Par exemple, sous Dreamweaver, Il s'agit de la fonction MM_validateForm.

Ajoutons une autre condition pour que ça merde : vous avez dans votre formulaire un champ appelé "mail", et vous avez aussi, mais ailleurs dans la page (en dehors du formulaire), une ancre appelée elle-aussi (hasard) "mail".

Et bien dans ce cas, la fonction de vérification en question va merder (dans mon cas, au moins !). Elle ne fera pas son boulot lorsque vous cliquerez sur Submit (ou soumettre, comme vous voulez).

Mais si vous virez l'ancre, que vous la changez de nom, ou que vous changez le champ input de nom (un seul de ces changements suffit), tout revient dans l'ordre.

C'était le récit de 4 heures perdues à comprendre, en espérant qu'il servira à quelqu'un un jour (j'ai mis tous les mots-clés que j'ai spontanément cherchés dans les moteurs de recherche).

Mais ceci dit, je ne serait pas contre une bonne explication rationnelle, un jour...

Bonne journée à tous.

Lien vers le commentaire
Partager sur d’autres sites

Etonnant! La fonction MM_validateForm de Dreamweaver doit être codée avec les pieds.

Lien vers le commentaire
Partager sur d’autres sites

Oui, voici deux pages d'exemple, ce sera plus clair.

Celui qui fonctionne

Celui qui merde

Il n'y a pas de traitement du formulaire après, envoyez juste un formulaire vide. Dans le premier cas, il refuse parce qu'il manque un mail et le nom.

Dans le deuxième cas, il passe (bon, ça merde parce qu'il n'y a pas de traitement, je vous préviens, mais ça passe...).

Regardez les différences entre les deux codes, seul le nom de l'ancre tout en bas change (il passe de mel à mail) !!

Lien vers le commentaire
Partager sur d’autres sites

:wacko: Houla !!

Alors c'est encore plus compliqué que ce que je croyais !!

En tous les cas, chez moi (avec IE6.0), je confirme, le premier marche et pas le deuxième !

A quoi est-ce dû ?...

<{POST_SNAPBACK}>

À tout hasard... À IE :hypocrite: !

Fallait préciser que tu avais testé sous cet ordinosaure !

Je viens de tester avec mon émulation, et effectivement, c'est encore lui qui emmerde le monde...

Un bon point à l'utilisation de IE : tu as pû voir le rendu sous un navigateur préhistorique ;)

En développant betement avec Firefox, tu ne te serai pas rendu compte du bug !

Pourquoi il ne gère pas deux élements ayant le même nom ?

Pas la moindre idée...

C'est trop pour lui ?

Loupilo.

Lien vers le commentaire
Partager sur d’autres sites

J'ai pas spécialement envie de défendre IE mais en l'occurence le fait de mettre deux id (ou name j'avoue ne pas avoir regardé les sources) au lieu d'un seul et s'étonner que ça marche pas ... ben désolé mais c'est normal.

C'est comme si j'avais deux bertrant Dupont et il ne faut payer une somme d'argent qu'à l'un des deux ... comment je suis censé savoir à qui je dois payer ??

Lien vers le commentaire
Partager sur d’autres sites

Enfin quand même : il s'agit d'une ancre et d'un champ de formulaire !

Pour poursuivre ton analogie, c'est comme si il y avait un Bertrant Dupont habitant Paris, et une rue Bertrant Dupont à Paris, on dirait bien qu'IE confond les deux !

Moi, ce qui me fascine surtout, ce sont les conséquences de ça. Le formulaire envoie bien les données : elles apparaîssent dans un fichier texte que je fais s'incrémenter. C'est juste la vérification qui merde (et pas seulement sur le champ incriminé, puisque même sur le champ "nom", la vérification ne se fait pas).

Lien vers le commentaire
Partager sur d’autres sites

en quoi il est censé savoir que c'est une ancre puisque tu lui donnes le même id ????

un id sert juste à identifier une zone et à y faire des actions comme une ancre, un formulaire, sur lequel tu peux jouer avec javascript, php et CSS.

Je crois plutôt qu'il faut aider le navigateur à ne pas se tromper en ayant des id uniques dans une page, ce qui n'est pas le cas dans ce que tu nous montres.

Je suis sûr et certain qu'un id doit être unique dans la page.

je fais un amalgame entre name et id, tout en sachant qu'à terme id sera le plus utilisé.

Modifié par Sylvain Trovalet
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je suis sûr et certain qu'un id doit être unique dans la page.

<{POST_SNAPBACK}>

Et tu as tout à fait raison B)

L'attribut id

id = nom [CS]

    Cet attribut assigne un nom à un élément. Ce nom doit être unique dans le document.

class = liste-de-valeurs-cdata [CS]

    Cet attribut assigne un nom de classe, ou un ensemble de noms de classe, à un élément. Un nombre quelconque d'éléments peut se voir assigner les mêmes nom de classe ou noms. Les noms de classe multiples doivent être séparés par des caractères blancs.

[...]

L'attribut id a plusieurs rôles dans HTML :

    * comme sélecteur dans une feuille de style ;

    * comme ancre cible de liens hypertextes ;

    * comme moyen d'appeler un élément particulier à partir d'un script ;

    * comme nom d'un élément OBJECT déclaré ;

    * pour un traitement universel par les agents utilisateurs (par exemple, pour identifier les champs lors de l'extraction des données des pages HTML pour peupler une base de données, pour traduire des documents HTML dans d'autres formats, etc.).

L'attribut name

name = cdata [CI]

    Cet attribut nomme l'élément de sorte qu'il puisse être appelé par une feuille de style ou un script.

Remarque : Cet attribut est conservé pour la rétro-compatibilité. Les applications devraient utiliser l'attribut id pour identifier les éléments.

Attention, les spécifications relatives à l'attribut name diffèrent selon l'élément concerné (liste des attributs)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Et tu as tout à fait raison  B)

Et ce n'est pas moi qui ait dit le contraire ;)

Mais je pensais que c'était des 'name', et je ne savais pas qu'ils se devaient également d'être uniques...

Dans ce cas... IE a raison... (et dieu sait que ça m'arrache le coeur de dire ça :lol:)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...