11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous!!

J'ai lu, je ne me rappelle plus trop où, qu'un appel de fonction effectué comme ceci:

<a href="javascript:uneFonction()"> </a>


était à éviter. Est-ce vrai? Sinon, quelle serait la bonne méthode à utiliser pour appeler une fonction?

Merci Smiley cligne
Modifié par tidanone (04 Aug 2005 - 18:41)
Modérateur
Tout dépend ce que la fonction fait, et si l'utilisation d'un lien est justifiée.

Dans le cas où il faudrait que le lien fonctionne même sans le javascript, il faut faire comme cela :


<a href="lapage.htm" onclick="uneFonction();return false;">Mon lien</a>


Certains vont même déclarer le onclick en dehors du document html (js externe).
Modifié par Merkel (04 Aug 2005 - 16:29)
Si la fonction ne fait que générer une action dans la page en cours, est-ce "standard" de créer un lien vide qui n'aura comme but que d'appeler cette fonction? EX:

<a href="#" onclick=uneFonction()> </a>


D'après moi, ce serait logique car il faut un porteur pour le onclick. Et ce porteur serait la balise <a>.
Modifié par tidanone (04 Aug 2005 - 16:36)
Modérateur
tidanone a écrit :

D'après moi, ce serait logique car il faut un porteur pour le onclick. Et ce porteur serait la balise <a>.


Ca pourrait être un problème parce qu'un lien avec un href="#", dans plusieurs navigateurs, cela fait remonter la page au début. Donc si la personne clique sur ton lien en bas de page, la bar de défilement va simplement remonter en haut, il va donc perdre l'endroit où il était.

La question à se poser aussi est pourquoi utiliser un <a> comme porteur ? N'importe quel élément html peut avoir un onclick, ou presque. Un <a> est là pour désigner un lien, et non pas pour servir seulement d'élément à cliquer.
Voici la situation... Sur le clic d'un lien <a>, j'appelle une fonction qui place une valeur variable à l'intérieur de champs cachés. Ensuite, je fais un form.submit().

Dans ce cas-ci, je ne peux pas mettre un url dans le href, parce que la page est appelée avant l'appel de la fonction. Donc, le form.submit() n'est pas géré. Est-il bon dans ce cas-ci de mettre un "#"? Ou bien est-ce que placer le onclick avant le href peut réglé le problème?
Modifié par tidanone (04 Aug 2005 - 17:33)
le fait de placer href avant onclick ne changera rien (ou alors je devrais me faire du mauvais sang)
Modérateur
tidanone a écrit :
Ensuite, je fais un form.submit().


Pourrais-tu nous expliquer concrètement ce que tu essaye de faire ? À quoi sert ton formulaire ? À qui s'adresse-t-il ? C'est important parce que lorsque je vois du javascript pour soumettre un formulaire, une petite étincelle me fait éclater quelques cellules.

Le problème premier de soumettre un formulaire sur le clique d'un élément c'est l'accessibilité. Certaines personnes (ce qui peut être beaucoup dans le monde entier), désactivent le Javascript ou bien ne peuvent tout simplement pas l'utiliser dans leur navigateur. Ton formulaire ne fonctionnera donc pas (ou de façon incorrecte). Il faudrait que tu nous explique ce que tu veux faire, question d'être certain que tu procède de la bonne façon et que t'es pas en train de faire une bidouille. Smiley langue

Si tu veux modifier des champs cachés lors de la soumission du formulaire, tu peux le faire avec l'événement onsubmit du form lui-même. Comme ca, Javascript ou non d'activé, ton formulaire pourra être envoyé quand même. Évidemment, tout dépend c'est quel genre de formulaire. Tu peux nous en dire plus ?

Une dernière chose, pourquoi vouloir autant utiliser un <a> pour ton clique ? Sérieusement, y'a une raison ?
Modifié par Merkel (04 Aug 2005 - 18:04)
Au clic d'une catégorie, générée par une base de donnée, je prend son ID et son nom et va les stocker, grâce au JS, dans des champs cachés d'un formulaire (unID et unNom). Ceux-ci peuvent ensuite être envoyés grace au Submit et dans la page suivante, unID et unNom sont récupérés par le $_POST de PHP.

Sinon, sans JS, je devrais avoir un formulaire par catégorie, contenant déjà son nom et son ID. Au clic de la catégorie, il y a submit du formulaire propre à celle-ci et les champs sont automatiquement transférés. Cependant, si j'ai 40 catégories, j'ai 40 formulaires.
Modérateur
euh....

Pourquoi ne pas générer une liste de catégories en html (ul li et a) et passer les ID et/ou le nom par l'url ? Tu vas pouvoir les récupérer avec php aussi. Pourquoi vouloir tout faire passer par POST ?
Modérateur
Eh bien, ton employeur ne se rend pas compte des problèmes que ca peut apporter que de faire ca :

1. La navigation sur son site sera impossible pour une bonne partie de la population n'ayant pas le Javascript
2. Les personnes qui voudront mettre une page d'une catégorie dans leur Marque-pages (favoris) ou la prendre en note pour y revenir plus tard ne pourront tout simplement pas le faire.
3. Les moteurs de recherche auront du mal - à moins d'ajout supplémentaire dans le code - à passer de catégorie en catégorie, donc de page en page.

Conclusion : le site aura un gros problème d'accessibilité et de référencement.

Si c'est parce qu'il trouve laid les paramètres dans l'url, il existe l'URL Rewriting, qui fait en sorte de donner l'impression qu'il s'agit de sous-dossiers, du style : lesite.com/ID25/Bidouilles/
Modifié par Merkel (04 Aug 2005 - 18:39)
Je viens de lui en parler et il accepte. Ce sera d'ailleurs moins de trouble pour les programmeurs.

Désolé si je n'ai pas été très clair, mais je suis sûr que vous comprenez que parfois, on ne peut pas faire autrement que ce que le patron demande. Smiley cligne

Merci beaucoup de ta patience, Merkel Smiley smile
Modérateur
tidanone a écrit :
Désolé si je n'ai pas été très clair, mais je suis sûr que vous comprenez que parfois, on ne peut pas faire autrement que ce que le patron demande. Smiley cligne


En effet, souvent, on se retrouve face à un mur, mais les patrons sont ouverts lorsqu'on apporte de bons arguments. Les arguments au sujet des normes de validité et de qualité ne font pas toujours le poids (malheureusement)*, mais lorsqu'on mentionne la perte potentielle de visiteurs et des points négatifs au référencement du site, ca touche une zone sensible la plupart du temps.

Je suis content que tu es pu le convaincre de passer en GET. Smiley cligne

* De mon côté, mon patron est vendu Firefox et Thunderbird, et les normes, bien qu'il sache plus ou moins c'est quoi, est bien d'accord que je les respecte. Il sait que ca l'apporte un niveau de qualité plus élevé de nos produits, alors je suis heureux comme un écureuil dans les poubelles d'un Arrêt-Routier (y'a du vécu dans cette référence).
Modifié par Merkel (04 Aug 2005 - 18:51)