11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Plusieurs items de ma page (des input et des images servant de boutons) opèrent un submit du formulaire de la page, mais pas avec la même url (les input sur onchange, les images sur onclick).
Problème: si je modifie un input, puis clique sur une image, seul le submit de l'input se fait. Je dois tabuler pour sortir de l'input, puis seulement cliquer sur mon image, opération que mes utilisateurs ne conçoivent pas.

Le problème persiste si j'attache les événements par une syntaxe telle que:


  if (elt.addEventListener){
    elt.addEventListener(eventName, fct, false);
  } else if (elt.attachEvent) {
    elt.attachEvent('on'+eventName, fct);
  }

plutôt que par onchange="..." et onclick="...". Même résultat.

Je me demande s'il est réellement envisageable, sans utiliser un setTimeout sur les images, d'exécuter successivement ces deux fonctions.
Pensez-vous que, du fait que ces fonctions font toutes deux un submit, l'une des 2 passe forcément à la trappe ?
Modifié par Carla3112 (17 Apr 2007 - 10:41)
Salut,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace).

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile

upload/1-code.gif
Bonjour,
Plusieurs remarques :

Carla3112 a écrit :
Plusieurs items de ma page (des input et des images servant de boutons) opèrent un submit du formulaire de la page, mais pas avec la même url (les input sur onchange, les images sur onclick).
Problème: si je modifie un input, puis clique sur une image, seul le submit de l'input se fait. Je dois tabuler pour sortir de l'input, puis seulement cliquer sur mon image, opération que mes utilisateurs ne conçoivent pas.

Double mauvaise idée pour la'ccessibilité : remplir ton formulaire uniquement à l'aide du clavier ne sera pas chose facile.
Tout d'abord, soumettre un formulaire avec un onchange sur un input est une mauvaise idée car une fois que j'ai rempli le champ et que je veux passer au suivant, je fais naturellement tab. Problème, je ne passe pas au suivant, mais je recharge une nouvelle page, ce qui implique que je dois me retaper tous les liens et tous les champs précédents avant d'arriver au champ que je voulais remplir.
Onclick sur une image est également une mauvaise idée car il est impossible d'accéder à cet élément sans souris.
Carla3112 a écrit :

Je me demande s'il est réellement envisageable, sans utiliser un setTimeout sur les images, d'exécuter successivement ces deux fonctions.
Pensez-vous que, du fait que ces fonctions font toutes deux un submit, l'une des 2 passe forcément à la trappe ?


Alors ceci serait le troisième problème de ton formulaire : oui, effectivement, on ne peut pas submitter deux fois et pour une raison bien simple : une nouvelle page est chargée, la mémoire javascript est donc remise à zéro ce qui fait perdre toutes les variables et tous les évènements suivant la soumission ne sont plus traités. Un moyen de le contourner serait de passer par une variable GET ou POST mais le submit automatique dès l'arrivée sur une page n'est pas non plus une bonne idée.

Donc, en un mot, il faut repenser ton formulaire. Pourquoi as-tu besoin de le submitter après avoir rempli chaque champ ?
QuentinC a écrit :
Pourquoi as-tu besoin de le submitter après avoir rempli chaque champ ?

Il s'agit d'un formulaire de devis. Chaque input correspond à un montant, ou une réduction, ou un taux de taxe ...etc. Donc chaque fois que l'un d'eux est modifié, un recalcul des autres est nécessaire. De plus, l'architecture du mon logiciel, assez complexe, ne me permet pas d'accéder facilement à un élément de la page depuis un autre : les identifiants sont calculés à l'exécution (donc un élément ne connait pas les autres éléments de la page) et le total, affiché en pied de page, n'est pas un input mais un texte simple, donc encore plus difficile à mettre à jour.
C'est donc le sendForm qui permet à l'appli java d'effectuer ces mises à jour.