Différence entre <a href="javascript:toto()"> et <a onClick="..."> ?? - HTML/CSS - Programmation
Marsh Posté le 06-06-2006 à 18:23:17
Voila en fait, si je fais <a onClick="javascript:toto( this )" >test</a>
Je peux bien manipuler l'element a du bouton, et si je change onClick par href ça ne fonctionne plus. Enfin la fonction javascript est bien appelé mais le this ne semble plus correspondre à ce que je veux :-\
Marsh Posté le 06-06-2006 à 18:45:22
20.000 fois on le voit ce topik
Code :
|
Et un lien à tjrs un href que tu le veuille ou non
Marsh Posté le 06-06-2006 à 18:53:47
xtof_83 a écrit :
|
Le mieux étant encore de mettre dans le href un lien vers une page indiquant que le javascript est obligatoire, car le # à une autre signification
xtof_83 a écrit : Et un lien à tjrs un href que tu le veuille ou non |
Ah bon? ça sort d'ou ça?
Marsh Posté le 06-06-2006 à 19:02:04
anapajari a écrit : Le mieux étant encore de mettre dans le href un lien vers une page indiquant que le javascript est obligatoire, car le # à une autre signification |
ouais je sais
anapajari a écrit : |
Me suis laisser emporté, mais dans son désolé, on peu pas, ne pas le mettre....
EDIT: Et puis à quoi ça servirais un <a>rien</a>
Marsh Posté le 07-06-2006 à 00:45:04
xtof_83 a écrit :
|
Enfin bon, moi aussi je peux sortir les T'as pas l'impression d'être à côté de la plaque ??
A part me copier/coller du w3c, tu pourrais m'expliquer pourquoi un
Code :
|
ne fait pas du tout la même chose qu'un
Code :
|
alors ??
Marsh Posté le 07-06-2006 à 00:56:01
onclick="javascript:toto(this);return false;"
WTF
onclick="toto(this);return false;"
svpmerssi
Et les deux font strictement la même chose chez moi (et sont quasiment aussi mauvais l'un que l'autre, la 2e version étant la moins pire)
anapajari a écrit : Le mieux étant encore de mettre dans le href un lien vers une page indiquant que le javascript est obligatoire |
Ce qui n'est jamais le cas
anapajari a écrit : car le # à une autre signification |
Autre que quoi?
anapajari a écrit : Ah bon? ça sort d'ou ça? |
De l'implémentation de certains navigateurs.
Marsh Posté le 07-06-2006 à 01:25:06
masklinn a écrit : onclick="javascript:toto(this);return false;" |
Bein en passant par le OnClick, en passant le this en paramètre, je peux acceder ensuite dans la fonction à l'objet DOM, pour recuperer son pere, ses frere etc... En remplaçant juste onClick par href la fonction est bien appelée mais javascript crash lors de l'accès à a_link.parentNode, élément non définit, le a-link étant le nom du this, le <a /> dans la fonction.
Marsh Posté le 07-06-2006 à 08:33:04
ah... euh... ouais ptet, de toute façon faut pas mettre de javascript dans le href et faut pas utiliser le pseudo-protocole "javascript:"
Marsh Posté le 07-06-2006 à 09:32:35
Code :
|
Le 2ieme donne bien le bon résultat, enfin celui que j'attends mais pas le premier ...
Marsh Posté le 07-06-2006 à 09:41:02
masklinn a écrit : Ce qui n'est jamais le cas |
Jamais jamais ... c'est vite dit J'aurais pu dire "un lien vers un traitement equivalent coté serveur"...
masklinn a écrit : Autre que quoi? |
Tout le monde utilise le # en pensant qu'il est l'équivalent de "pas de lien", ce qui n'est pas le cas.
masklinn a écrit : De l'implémentation de certains navigateurs. |
C'est l'implémentation des navigateurs qui décide maintenant ???
Et puis c'est nawak quand même, puisque les ancres sont gérées par tous les navigateurs et donc:
Code :
|
ne comprends pas de href et fonctionne partout
Ricco a écrit :
|
C'est on ne peut plus normal, il n'y a qu'avec la deuxieme méthode ou tu "attrapes" l'evenement "clic". Grace à cet evenement, tu peux savoir quel est l'objet qui fut cliqué.
Marsh Posté le 07-06-2006 à 10:03:02
anapajari a écrit :
|
Sauf que cette méthode tend à disparaitre, étant donné qu'on peut aire la même chose en filant tout simplement un id à l'élément vers lequel on souhaite pointer, on évite ainsi de créer un élément pour rien.
Marsh Posté le 07-06-2006 à 10:41:46
j_lecruel a écrit : Sauf que cette méthode tend à disparaitre, étant donné qu'on peut aire la même chose en filant tout simplement un id à l'élément vers lequel on souhaite pointer, on évite ainsi de créer un élément pour rien. |
+1
Marsh Posté le 07-06-2006 à 11:17:47
anapajari a écrit : Et puis c'est nawak quand même, puisque les ancres sont gérées par tous les navigateurs et donc:
|
Les ancres c'est nawak
Elles n'ont pas de sens au niveau de la page et sont donc dépréciée (d'ailleurs je te ferais remarquer que l'attribut name sur les éléments A est déprécié) au profit d'un id signifiant sur un élément quelconque
Marsh Posté le 07-06-2006 à 11:19:37
anapajari a écrit : Le mieux étant encore de mettre dans le href un lien vers une page indiquant que le javascript est obligatoire, car le # à une autre signification |
putain +1 tiens.
Et raz-le-bol de voir des mecs qui se la jouent spécialistes des standards ici ou là sur le net avec du javascript dans les liens ou encore des #.
Marsh Posté le 07-06-2006 à 11:28:55
j_lecruel a écrit : Sauf que cette méthode tend à disparaitre, étant donné qu'on peut aire la même chose en filant tout simplement un id à l'élément vers lequel on souhaite pointer, on évite ainsi de créer un élément pour rien. |
Oui mais bon c'est dans la recommandation HTML4.01, c'est pas moi qui l'invente!!!
J'ai pas dit que c'était à utiliser, mais c'était un example de lien sans href, supporté par tous les navigateurs.
masklinn a écrit : Les ancres c'est nawak |
Que ça soit nawak ou pas c'est un autre problème...
Mais j'aimerais bien savoir d'ou tu sors que c'est déprécié, si je prends la recommandation HTML4.01( lire la) rien ne le précise.
Mon seul propos était de contre-dire le fait que les href étaient obligatoires dans les balises A.
Et puis de toute façon, aucune des deux solutions présentées pour ajouter la gestion du clic n'est vraiment idéale à mon sens. Le mieux de de setter la gestion des evenements en js, genre:
Code :
|
Comme ça pour les visiteurs ayant le js désactivé, il ne se passe strictement rien
Marsh Posté le 07-06-2006 à 11:40:15
Hermes le Messager a écrit : Et raz-le-bol de voir des mecs qui se la jouent spécialistes des standards ici ou là sur le net avec du javascript dans les liens ou encore des #. |
Là je suis bien d'accord
Mais pour faire des micro-demos d'une page j'ai un peu de mal à utiliser des vrais liens perso
Et j'utiliserais bien le "pas de href" pour les liens générés dynamiquement (créations de menus), pas de bol dans 2 navigateurs sur 3 le lien n'est pas interprété comme un lien \o/
Marsh Posté le 20-06-2006 à 11:24:42
anapajari a écrit : Et puis de toute façon, aucune des deux solutions présentées pour ajouter la gestion du clic n'est vraiment idéale à mon sens. Le mieux de de setter la gestion des evenements en js, genre:
|
Une petite question par rapport à ça : je me suis dit que c'était effectivement plus propre de séparer la gestion des évènements du contenu de la page. Mais apparemment, je n'ai pas dû tout bien comprendre. J'ai fait un test type hello world :
Code :
|
Et ça ne marche pas.. je me suis alors dit que ça devait venir du fait que l'évènement onClick ne fonctionnait pas avec une image (on ne sait jamais) et j'ai donc remplacé l'image par une ancre. C'est là que ça a commencé à m'embrouiller :
Code :
|
fonctionne avec FF (mais pas avec IE) (je sais qu'un href vide est une aberration, mais quand on tatonne..), mais le alert se lance aussi au chargement de la page
Code :
|
par contre ne fonctionne pas et le alert se lance encore une fois au chargement au chargement.
Vous auriez peut être un lien où je pourrais trouver des explications concernant la gestion des évènements séparée ?
Marsh Posté le 20-06-2006 à 11:48:03
gravastar_bureau a écrit : Une petite question par rapport à ça : je me suis dit que c'était effectivement plus propre de séparer la gestion des évènements du contenu de la page. Mais apparemment, je n'ai pas dû tout bien comprendre. J'ai fait un test type hello world :
|
Nan mais faudrait te demander ce que fait ton code ptet, parce que là je sais pas si tu te rends compte (apparement non) mais ton JS s'exécute directement au moment où il est rencontré.
En d'autres termes, ton JS s'exécute alors que l'image existe pas encore, donc il tourne un peu dans le vide... d'ailleurs il devrait provoquer au mieux des warnings au pire des erreurs dans tous les navigateurs
Accessoirement t'as écrit n'importe quoi:
Marsh Posté le 20-06-2006 à 12:10:05
masklinn a écrit : Nan mais faudrait te demander ce que fait ton code ptet, parce que là je sais pas si tu te rends compte (apparement non) mais ton JS s'exécute directement au moment où il est rencontré.
|
Alors pour répondre à ta question, je m'en rendais un peu compte, mais insérer une balise script au milieu du code html ne correspond pas trop à ce que j'aurais voulu faire (c'est peut être - sans doute même - débile, mais j'aurais aimé pouvoir séparé nettement le javascript de l'html).
Et au risque de paraître encore plus idiot (si c'est encore possible), alert n'est-il pas considéré comme une fonction ?
Marsh Posté le 20-06-2006 à 12:12:56
gravastar_bureau a écrit : Alors pour répondre à ta question, je m'en rendais un peu compte, mais insérer une balise script au milieu du code html ne correspond pas trop à ce que j'aurais voulu faire (c'est peut être - sans doute même - débile, mais j'aurais aimé pouvoir séparé nettement le javascript de l'html). |
Je vois pas le problème, ya des handlers faits spécialement pour pouvoir exécuter tes scripts après la fin du chargement de la page, genre window.onload
gravastar_bureau a écrit : Et au risque de paraître encore plus idiot (si c'est encore possible), alert n'est-il pas considéré comme une fonction ? |
alert oui, alert('foo') sûrement pas
L'un est une fonction (et 'retourne' donc la fonction), l'autre est un appel de fonction (et retourne donc le résultat de l'appel de la fonction)
Marsh Posté le 20-06-2006 à 12:33:56
Bon, ça suffit. Arrêtez de faire vos clampins et de pondre du JS de merde
Etape 1 : rendez-vous sur http://developer.yahoo.com/yui/index.html et chopper la librairie Yahoo UI
Etape 2 : choppez dedans les fichier yui\build\yahoo\yahoo-min.js et yui\build\event\event-min.js
Etape 3 : référencez les deux fichiers dans le head
Etape 4 : faites-vous un script d'init qui définira l'event handler pour le a en question :
YAHOO.util.Event.addListener('helloworld', 'click', pouet); |
La lib yahoo event gère en plus l'attachment deferal, à savoir que si l'élément avec l'id spécifié n'existe pas encore, la librairie check à interval régulier jusqu'au window.onload, à la recherche de l'élément -> plus besoin de se faire chier avec le onload. Le premier paramètre d'addListener prend aussi en paramètre une collection d'éléments. Y'a aussi correction automatique du scope, à savoir que this dans l'événement va faire référence à l'objet à l'origine de l'événement, y compris sous IE. Pareil pour la variable e, qui correspond à un objet évènement.
Marsh Posté le 20-06-2006 à 12:38:24
Sinon pour revenir à la différence entre :
<a href="javascript: window.open('pouet.html')">pouet</a> |
et
<a href="pouet.html" onclick="window.open(this.href); return false;">pouet</a> |
Essayer d'ouvrir le premier lien dans une nouvelle fenêtre Essayer de faire référencer pouet.html par google
Marsh Posté le 20-06-2006 à 12:44:25
FlorentG a écrit : Bon, ça suffit. Arrêtez de faire vos clampins et de pondre du JS de merde
|
Merci bien pour la librairie
Par contre, je n'arrêterais pas de pondre du js de merde :
1/ parce que sinon je m'embête
2/ parce que si on n'essaie pas, on n'apprend pas
3/ parce que j'aime pas les gens grossiers
Marsh Posté le 20-06-2006 à 13:12:06
Même si force est de constater qu'on peut se permettre d'être grossier quand on est le plus meilleur de l'univers quand même.
Marsh Posté le 10-09-2007 à 11:49:22
La solution est peut-être :
<a href="javascript:void(0);" onClick="javascript:toto()" > qui ne rechargera pas la page et ne déplacera pas l'ascenceur.
Marsh Posté le 10-09-2007 à 11:53:12
Euh
Qu'est ce que c'est que ce up des 15 mois pour nous pondre un truc toupabo ???
Marsh Posté le 10-09-2007 à 16:25:00
PtiMalin a écrit : La solution est peut-être : |
Surtout pas, malheureux
Marsh Posté le 10-09-2007 à 17:00:29
xtof_83 a écrit : |
xtof_83 a écrit : |
<a name="toto">a</a>
ça peut être utile des fois
Marsh Posté le 10-09-2007 à 17:02:12
ah ouais c'est quoi ce up ?
pis d'abors, faut pas mettre de onclick sur le <a>.
faut faire un script associé à la balise, ça évite de coller des trucs pourris partout dans ton code, et ça le rend plus portable.
Marsh Posté le 10-09-2007 à 17:05:07
Code :
|
edit : (en qui marche )
Marsh Posté le 11-09-2007 à 11:38:37
masklinn a écrit :
|
Depuis quand le javascript est case sensitive sur onclick ?
Marsh Posté le 11-09-2007 à 11:55:58
toujours
Mais ce n'est pas le cas de l'attribut html onclick.
Marsh Posté le 11-09-2007 à 13:53:34
non ce que dit Masklinn est 100% véridique.
Le javascript indiqué dans l'exemple s'éxecute au moment ou il est reçu par le navigateur et non une fois la page entièrement chargée ( dans le head ou pas ça change rien).
Un petit exemple facile à mettre en oeuvre, dans le head tu balourdes:
Code :
|
et tu verras bien ce qui se passe
EDIT: MAGICBUZZ CA SE FAIT PAS DE SUPPRIMER LES POSTS OU ON DIT DES CONNERIES
Marsh Posté le 11-09-2007 à 14:05:43
anapajari a écrit : non ce que dit Masklinn est 100% véridique.
|
j'ai supprimé avant que tu répondes, me rendant compte qu'effectivement j'avais dit un truc pas vrai
en fait c'est le "window.onload" qui attend gentillement, et moi je fais toujours un window.onload = Init() qui s'occupe de faire tout le reste en début de page, et window est un objet qui existe avant la création de l'oeuf mais ensuite l'event n'est levé qu'une fois... la page chargée (cf mon exemple par exemple)
Marsh Posté le 11-09-2007 à 17:47:28
window.onload = Init() <==== là je sais pas si tu te rend comptes mais tu Executes Init() en mettant les ();
il faut juste passer init en tant que référence :
window.onload = Init
Marsh Posté le 11-09-2007 à 17:56:16
oui bah comme dans son exemple quoi ...
faudrait arrêter de chipoter sur des abus de langage, sinon on va croire que c'est rempli de nerds ce forum
Marsh Posté le 14-09-2007 à 12:27:14
Merci TheRom_s
Gatsu35 > Ca doit faire 4 ou 5 ans que je ne fais plus de JS, ou très ponctuellement, j'ai un peu perdu l'habitude de la syntaxe Mais mon exemple est testé et marche, donc c'est à lui qu'il faut faire confiance... Si tu crois encore tout ce que je raconte
Marsh Posté le 14-09-2007 à 12:31:37
MagicBuzz a écrit : Merci TheRom_s |
Mais tu es sur que tu sais programmer ?
faire :
Code :
|
revient à mettre la valeur de retour de init() dans window.onload, donc window.onload sera du type "null" si init() ne retourne rien.
Ce que tu dois faire c'est ne pas mettre les guillemets, ou bien faire en sorte que init retourne une fonction
Marsh Posté le 14-09-2007 à 13:36:37
regarde mon exemple bordel
http://forum.hardware.fr/forum2.ph [...] 0#t1610167
j'ai écrit cette ligne "à la va-vite", sans faire attention à ce que j'écrivais.
et savoir écrire :
Code :
|
C'est loin d'être une preuve de connaissances en programmation.
Vas-y l'affectation de handler à un event ! Affecter un handler à un event, c'est une ineptie totale.
On associe, on affecte pas. Déjà le += du C#, je trouve ça limite barbare, mais le = tout court, c'est stupide (et hyper limité). On préfèreras utiliser la fonction myEvent.addHandler(ptrHandler)
Marsh Posté le 06-06-2006 à 18:06:47
Salut,
déja quel est la plus correcte des deux ?
Mon but est de créer des boutons en html javascript. J évite le <a href="#" onClick="javascript:toto()" > car cela fait remonter l assenceur.
J ai commencé sur mon site à passer à <a href="javascript:toto()"> pour beneficier du :hover sous IE mais le comportement me semble différent <a onclick="javascript:toto()"> que j utilisais avant. Certaines fonctions où je passais des this ou des id en parametres fonctionnent avec onClick mais pas avec href. Est-ce un problème connu ? Comment y remedier ?
Message édité par Ricco le 06-06-2006 à 18:09:09
---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry