Pb code js, top.location marche pas....

Pb code js, top.location marche pas.... - HTML/CSS - Programmation

Marsh Posté le 29-06-2005 à 21:18:18    

Bon alors voilà j'ai un problème rapport à ce code js et je vois pas d'où ca peut venir...
 

Code :
  1. <script language="javascript">
  2. function del(id) {
  3.  if ( confirm("Voulez vous vraiement supprimer ce message?" ) ) {
  4.   top.location = "?mode=delete&id_message="+id;
  5.  }
  6. }
  7. </script>


 
Et voici le lien que j'utilise pour appeler la fonction:
 

Code :
  1. <a href="javascript:;" OnClick="del(1)">Supprimer</a>


 
En cas de clique sur ok lors du confirm et bien il n'y a pas de redirection vers l'url :
?mode=delete&id_message=1

Reply

Marsh Posté le 29-06-2005 à 21:18:18   

Reply

Marsh Posté le 29-06-2005 à 21:55:00    

Quel intérêt ça a un bordel pareil?. [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-06-2005 à 22:28:08    

un simple lien avec un alert fais pareil non ?


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 29-06-2005 à 23:59:08    

masklinn a écrit :

Quel intérêt ça a un bordel pareil?. [:pingouino]


Hummm... Qu'est ce que tu veux dire par "Un bordel pareil"? Parceque je tiens quand même à préciser que ce que je viens de mettre en place c'est une "sorte de livre d'or" avec des fonctions d'administration comme par exemple la suppression d'un message. Donc je ne peux pas devinner quel sera l'identifiant du message dans ma base de données à l'avance. Donc je pensais qu'une fonction allais mieux pour demander confirmation!
 

plainsofpain a écrit :

un simple lien avec un alert fais pareil non ?


Un alert()? Bah je veux bien mais je vois pas bien comment demander si on veut vraiment supprimer le message et si oui envoyer le gars sur la page qui supprime avec seuleument un alert(). Mais si tu le sais je t'écoute, enfin... je te lis!

Reply

Marsh Posté le 30-06-2005 à 00:16:25    

Au lieu d'écrire  

<a href="javascript:;" OnClick="del(1)">Supprimer</a>


tu écris

<a href="?mode=delete&amp;id_message=1">Supprimer</a>


et baste [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-06-2005 à 00:29:33    

Ouai je sais bien c'est la solution simple, mais bon j'aimerais bien faire un truc assez donc avec une confirmation avant suppression, le plus simple étant donc de faire la confirmation en js sur la même page plutot que sur une suivante.
 
Mais quelqu'un voit quelque chose qui ne va pas dans mon code? Moi je vois pas!

Reply

Marsh Posté le 30-06-2005 à 06:53:09    

Perso, sur mon forum, j'ai fait comme ça :

Code :
  1. function attention(value,texte) {
  2. if (confirm(texte)) {
  3.  location = value;
  4.  return true;
  5. } else {
  6.  return false;
  7. }
  8. }


dans le js
et dans le HTML

Code :
  1. <a href="#1" onclick="if (!(attention('lienpoureffacer.php','Etes vous sur de vouloir supprimer ce message ?'))) return false;">
  2. Effacer ce message</a>


C'est moche pour ceux qui n'ont pas le JS d'activer enfin bon, personne ne s'est jamais plaint sur mon forum et j'ai pas envie qu'on vienne me voir en disant qu'on a effacer son message en cliquant là où il fallait pas et j'avais franchement pas envie de faire une page intermédiaire juste pour valider l'effacement, bonjour la vitesse de réaction et le temps perdu pour effacer un message.


Message édité par The-Shadow le 30-06-2005 à 06:54:50
Reply

Marsh Posté le 30-06-2005 à 07:38:58    

The-Shadow a écrit :

Perso, sur mon forum, j'ai fait comme ça :

Code :
  1. function attention(value,texte) {
  2. if (confirm(texte)) {
  3.  location = value;
  4.  return true;
  5. } else {
  6.  return false;
  7. }
  8. }


dans le js
et dans le HTML

Code :
  1. <a href="#1" onclick="if (!(attention('lienpoureffacer.php','Etes vous sur de vouloir supprimer ce message ?'))) return false;">
  2. Effacer ce message</a>


C'est moche pour ceux qui n'ont pas le JS d'activer enfin bon, personne ne s'est jamais plaint sur mon forum et j'ai pas envie qu'on vienne me voir en disant qu'on a effacer son message en cliquant là où il fallait pas et j'avais franchement pas envie de faire une page intermédiaire juste pour valider l'effacement, bonjour la vitesse de réaction et le temps perdu pour effacer un message.


Obtrusif, mal [:mmmfff]
 
On pourrait... considérer que certains liens sont dangereux

<a href="?mode=delete&amp;id_message=1" class="dangerous">Supprimer</a>


 
Et dans un fichier javascript séparé on en fait la gestion

function checkLinks() {
    if(!document.getElementsByTagName)
        return;
    var links = document.getElementsByTagName('A');
    for(var i=links.length-1; i>=0; --i)
        if(links[i].className.indexOf('dangerous') != -1)
            links[i].onclick = function (e) {  
                    return confirm("Voulez vous réellement effectuer cette action?" );
                }
}
 
window.onload = checkLinks;


De cette manière on a autant de liens "à confirmer" qu'on veut, et pour mettre en place la confirmation d'un lien il suffit d'ajouter une classe.
 
On pourrait même récupérer le contenu (l'intitulé) du lien pour l'afficher dans le confirm.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-06-2005 à 07:43:40    

Très intéressant Masklin, je mets le topic en favori, il se peut que je revienne ici quand je m'occuperais de nettoyer un peu les bugs sur mon forum. :jap:

Reply

Marsh Posté le 30-06-2005 à 07:50:22    

The-Shadow a écrit :

Très intéressant Masklin, je mets le topic en favori, il se peut que je revienne ici quand je m'occuperais de nettoyer un peu les bugs sur mon forum. :jap:


Le javascript non obtrusif, c'est bieng [:dawa]
 
On s'amuse comme un fou avec [:dawa]
 
Sauf quand on tape des scripts de 1500-2000 lignes et qu'on arrive pas à les débugger  [:perchut2]  
 
Disons que JS non obtrusif + DOM + DOM Events + masochisme (parce qu'il faut se taper la compatibilité sur tous les navigateurs mainstream [:moule_bite] ) ça permet d'avoir des effets plutôt sympas en gardant un code HTML tout propre.
 
Genre là je fais un Find As You Type pour internet explorer [:moule_bite]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-06-2005 à 07:50:22   

Reply

Marsh Posté le 30-06-2005 à 14:49:20    

Effectivement simpa ton script, j'avais pas tellement pensé à faire comme ca... lol Bon bah merci et je vais tester tout ca!
 
(Quelqun voit un erreur dans mon code?)

Reply

Marsh Posté le 30-06-2005 à 18:14:20    

ouéééééééééégrace à papi masklinn j'ai enfin compris le JS non obtrusif. ca fait un ptit bout de temps que je m'y interessait.
 
merki papi masklinn

Reply

Marsh Posté le 30-06-2005 à 18:29:12    

gatsusat a écrit :

ouéééééééééégrace à papi masklinn j'ai enfin compris le JS non obtrusif. ca fait un ptit bout de temps que je m'y interessait.
 
merki papi masklinn


Bah fallait faire un topic "Qu'est-ce que ça veut dire "javascript non obtrusif?"
Je t'aurais répondu que c'est le fait de laisser le javascript dans un fichier annexe, connecté au HTML via les gestionnaires d'évènements du DOM et les noms/classes/ids et ne faisant qu'améliorer le comportement des éléments et l'expérience de l'utilisateur sans pour autant être essentiels au bon fonctionnement de la page.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-06-2005 à 18:40:06    

je savais ce que c'était, mais c'est le mettre en oeuvre ou j'avais du mal. Now ce soir je sens que je vais m'amuser alors

Reply

Marsh Posté le 30-06-2005 à 22:34:10    

gatsusat a écrit :

je savais ce que c'était, mais c'est le mettre en oeuvre ou j'avais du mal. Now ce soir je sens que je vais m'amuser alors


Tiens, exemple ici


Message édité par masklinn le 30-06-2005 à 22:34:50

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-07-2005 à 10:46:19    

http://www.martoh.com/smileys/martoh_corbeau.gif
 
Il va servir souvent celui la :D


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 02-07-2005 à 09:29:47    

Bonjour Masklinn,
 
J'aime beaucoup cette façon de bien séparer le code JS dans un fichier à part sans avoir à déclarer les appels aux méthodes dans la page HTML.
Ca m'a d'ailleurs bien servi hier car j'avais un tag JSP qui ne permettait pas de mettre un onClick sur un TR mais uniquement un class.
 
Comme j'aime beaucoup séparer les couches j'ai aussi sorti le code qui fait le traitement JS dans un deuxième fichier à part.  
Donc j'ai un fichier JS qui ressemble à ton code et qui ne sert qu'à définir que tel [type de tag + nom de class] possède tel événement.
Et d'autres fichiers JS qui contiennent les codes et calculs en eux-même.  
Ca m'a bien servi pour rendre mon code un peu plus lisible!
 
Mais j'ai une question concernant les arguments des méthodes JS. Comment fais-tu quand tu dois appeler une méthode qui possède plusieurs arguments?
Imaginons que les arguments ne dépendent pas cette fois-ci du nom de la classe.
Si on prend l'exemple d'un tableau avec plusieurs TR.  
On veut y mettre des onClick. Les TR ont tous le même class et appellent la même méthode JS.
Mais chacun affiche une alert avec un message différent (l'argument).
Où déclarerais-tu cet argument?
Dans le TR du fichier html?  
Ou encore avec du JS non obtrusif?
 
 

Reply

Marsh Posté le 02-07-2005 à 11:50:11    

ben on peut faire ce kon veut.
 
rien ne t'empeche de soit mettre une classe, soit un id sur le tableau
puis ensuite tu rajoute les actions sur les TR ou des styles.
ca peut etre amusant tout ca.

Reply

Marsh Posté le 02-07-2005 à 11:51:24    

Juste un petit coup de gueule au passage :o
 
ya trop de gens qui se mettent à faire des sites webs sans être passé par un apprentissage pour avoir un nivo suffisant en xHTML/CSS/JS et sur un langage sereur

Reply

Marsh Posté le 02-07-2005 à 11:55:30    

gatsusat a écrit :

Juste un petit coup de gueule au passage :o
 
ya trop de gens qui se mettent à faire des sites webs sans être passé par un apprentissage pour avoir un nivo suffisant en xHTML/CSS/JS et sur un langage sereur


Ouai bah ça, toutes les professions avec l'informatique comme outils sont dans le même cas.
Comme sur un autre topic où je viens de répondre à l'instant, je te rétorquerais qu'il y a trop de gens qui se mettent à développer des sites webs sous prétexte qu'ils connaissent le XHTML/CSS/JS/PHP alors qu'ils n'ont jamais fait d'études de communication, de graphisme ou de typographie.
Après, chacun voit midi à sa porte.
 

Reply

Marsh Posté le 02-07-2005 à 11:59:29    

The-Shadow a écrit :

Ouai bah ça, toutes les professions avec l'informatique comme outils sont dans le même cas.
Comme sur un autre topic où je viens de répondre à l'instant, je te rétorquerais qu'il y a trop de gens qui se mettent à développer des sites webs sous prétexte qu'ils connaissent le XHTML/CSS/JS/PHP alors qu'ils n'ont jamais fait d'études de communication, de graphisme ou de typographie.
Après, chacun voit midi à sa porte.


 
 
ouais ben c'est vrai.
 
Je ne fais pas encore de sites webs ou perso pour d'autres institutions (Assocs, TPE) pour le moment, parce que j'estime ne pas avoir assez de connaissances, même si j'arrive à faire quelque chose de potable graphiquement, et au niveau HTML/CSS/ je suis 9/10, JS 6/10, et PHP 7/10.
et pour les méthodes de Communication : ben c'est el client qui décide de ce ke tu dois mettre dans le texte, j'ai eu des cours de comm bien entendu, mais jvois po trop l'interet dans un site laule.
 
mé bon vaut mieux etre aidé par une tierce personne kan on fait un site web

Reply

Marsh Posté le 02-07-2005 à 12:07:01    

gatsusat a écrit :

ouais ben c'est vrai.
et pour les méthodes de Communication : ben c'est el client qui décide de ce ke tu dois mettre dans le texte, j'ai eu des cours de comm bien entendu, mais jvois po trop l'interet dans un site laule.


Comme certains ne voient pas l'intérêt de se prendre la tête avec des CSS alors qu'avec des Tables, c'est plus simple.
Internet, c'est un média de communication et comme certains se plaisent à le rappeler, de communication de l'information accessible. Le client, c'est un humain, souvent un directeur d'entreprise qui s'y connait dans sa branche mais pas forcément en communication ou en rédaction, c'est à la ou les personnes qui font le site d'être capable de le conseiller judicieusement, ne serais-ce que pour déterminer une cible, autrement, on fait n'importe quoi, c'est rapide, c'est accessible à tout le monde, même aux aveugles, mais on ne sait pas pourquoi, on a fait un site super W3C Compliant sans comprendre ce qu'on fesait, humhum, c'est très scolaire comme attitude pour des gens qui se permettent de remettre en question 75% des newbs webmasters qui se pointent ici.
 
 

Reply

Marsh Posté le 02-07-2005 à 12:15:15    

The-Shadow a écrit :

Comme certains ne voient pas l'intérêt de se prendre la tête avec des CSS alors qu'avec des Tables, c'est plus simple.
Internet, c'est un média de communication et comme certains se plaisent à le rappeler, de communication de l'information accessible. Le client, c'est un humain, souvent un directeur d'entreprise qui s'y connait dans sa branche mais pas forcément en communication ou en rédaction, c'est à la ou les personnes qui font le site d'être capable de le conseiller judicieusement, ne serais-ce que pour déterminer une cible, autrement, on fait n'importe quoi, c'est rapide, c'est accessible à tout le monde, même aux aveugles, mais on ne sait pas pourquoi, on a fait un site super W3C Compliant sans comprendre ce qu'on fesait, humhum, c'est très scolaire comme attitude pour des gens qui se permettent de remettre en question 75% des newbs webmasters qui se pointent ici.


 
 
Bon jvais te repondre :  
 
Quand je fais un site pour quelqu'un, et ce n'importe qui qu'il soit, cousin, oncle, assoc, et autre c'est :  
 
Analyse du besoin
Cahier des charges qui doit etre validé au client
Maquette graphique pour montrer à quoi le site ressemblera qui devra être validée au client.
Mise en oeuvre dans un premier temps du squelette du site
Maquettes HTML ou préPHP (juste de l'affichage) pour montrer au client, et s'il valide ou non.
Attaque du code avec bien entendu un rappel de temps en temps au client pour montrer ou on en est.
 
Après chacun voit comme il veut, mais moi j'aime bien cette methode.

Reply

Marsh Posté le 02-07-2005 à 12:17:05    

et puis des petites reunions utiles bien entendus.
 
 
c'est pas le tout d'être très bon en HTML/PHP/CSS/JS et tout le tralala. faut aussi avoir du relationnel client, et avoir de bonnes méthodes pour gérer à bien un projet.
 
Un site c'est pas des pages et des images.
 
Il y a aussi des méthodes et des règles à respecter.
 
et il y a des choses à ne pas faire, par exemple :  
 
Corriger en Javascript une erreur que le PHP ne pouvait pas gérer. ca signifie que ton système est bancale quelque part. Le JS c'est juste une surcouche pour simplifier la navigation, et non pas un truc indispensable au fonctionnement de ton système. Ca évidement je l'appliquerai plutot pour un site perso ou un petit site.
 
Si le site fais appel à de grosses techno genre Ajax, C kler ke JS a tout son intérêt, et faut l'utiliser utilement, pas merdiquement comme énoncé plus haut.  [:petrus75]  
 


Message édité par gatsusat le 02-07-2005 à 12:21:50
Reply

Marsh Posté le 02-07-2005 à 12:28:53    

Ouai, mais moi qui vient de la com., je te répondrais qu'il ne faut jamais faire confiance au client.
 
Ca me rappelle une certaine campagne législative à laquelle j'ai participé à l'exécution et où je n'avais rien à dire sur la nouvelle charte (ou du moins, ça fesait chier les supérieurs de m'écouter moi).
Du coup, toute la campagne a eu lieu, ça a couté des millions et un jour j'ai rencontré un député de gauche et je lui ai dit : "Vous trouvez pas que votre affiche toute rouge là, ça fait trop communiste ?" (c'était un peu plus long que ça et un peu plus complexe, mais j'abrège).
Et le client il était vert, il ne nous en voulait pas, nous n'avions fait que reproduire ce qu'il avait valider parce que c'est jolie le rouge. Enfin, la prochaine fois, il ira voir des pros de la communication, ça lui évitera des bourdes commes celle-ci. (Entre parenthèse, pour ceux qui s'en souviennent, tous les députés socialistes de gauche des dernières législatives ont basés leur campagnes sur ce rouge).


Message édité par The-Shadow le 02-07-2005 à 12:32:25
Reply

Marsh Posté le 02-07-2005 à 13:50:20    

Alors là franchement je ne comprends pas le coup de gueule.
 
Gatsusat, est-ce que tu t'adresses à moi?
Peut-être que tu penses que je n'ai pas le niveau suffisant pour réaliser des sites web parce que j'ai posé cette question sur la déclaration des arguments avec le code posé par Masklinn plus haut? (à ce propos ta réponse n'y répond pas, je sais bien qu'on peut faire ce qu'on veut je voulais savoir comment Masklinn s'organisait pour régler ce pb avec son code...).
 
Ou bien ta remarque était générale et sans relation avec mon post?
Ou bien peut-être que tu t'adresses à dwogsi, l'initiateur du topic?
 
Dans tous les cas de figure même avec peu de connaissance, ce n'est pas une honte de faire un site Web. C'est la meilleure façon d'apprendre et de progresser je pense.
 
Je suis ok avec toi quand tu dis qu'il faut faire un site web avec une tierce personne. Au niveau professionnel c'est un travail d'équipe avec des gens spécialisés qui se complètent.
Moi par exemple je suis spécialisé en langage serveur et en Java et d'autres personnes font la couche html/css/JS et encore d'autre le design, d'autres la com...
Mais je suis quand même curieux de voir comment font les web-designers pour bien organiser leurs css et leurs fichiers JS donc ça ne m'empêche pas d'essayer d'en faire.
 
Avec ce genre de forums on peut progresser assez vite mais si on reste dans le théorique sans jamais faire concrêtement des sites web et surtout des erreurs et des nuits à recorriger ton code, je pense que ce n'est pas bon.

Reply

Marsh Posté le 02-07-2005 à 14:08:50    

aminebousta a écrit :

Alors là franchement je ne comprends pas le coup de gueule.
 
Gatsusat, est-ce que tu t'adresses à moi?
Peut-être que tu penses que je n'ai pas le niveau suffisant pour réaliser des sites web parce que j'ai posé cette question sur la déclaration des arguments avec le code posé par Masklinn plus haut? (à ce propos ta réponse n'y répond pas, je sais bien qu'on peut faire ce qu'on veut je voulais savoir comment Masklinn s'organisait pour régler ce pb avec son code...).


Ce coup de gueule ne s'adresse pas à toi, mais à tous les mecs qui font des sites Webs, qui se disents développeurs webs et quand tu regarde le code Final (aussi bien serveur que client) c'est de la merde en barre et c'est bancale et patché à coup de JS
 

aminebousta a écrit :


Ou bien ta remarque était générale et sans relation avec mon post?


Non
 

aminebousta a écrit :


Ou bien peut-être que tu t'adresses à dwogsi, l'initiateur du topic?


Non
 

aminebousta a écrit :


Dans tous les cas de figure même avec peu de connaissance, ce n'est pas une honte de faire un site Web. C'est la meilleure façon d'apprendre et de progresser je pense.


D'accord mais pas d'accord pour dire : Je suis Webmaster Pro je fais de super choses aux normes. ET après tu veras des gars comme FlorentG dire : 95% des developpeurs web font encore des trucs qu'on fesait il y a 5 ou 10 ans
 

aminebousta a écrit :


Je suis ok avec toi quand tu dis qu'il faut faire un site web avec une tierce personne. Au niveau professionnel c'est un travail d'équipe avec des gens spécialisés qui se complètent.
Moi par exemple je suis spécialisé en langage serveur et en Java et d'autres personnes font la couche html/css/JS et encore d'autre le design, d'autres la com...
Mais je suis quand même curieux de voir comment font les web-designers pour bien organiser leurs css et leurs fichiers JS donc ça ne m'empêche pas d'essayer d'en faire.


Ok aussi avec toi, mais la plupart du temps, il vaut mieux faire son code HTML d'abord puis ensuite faire la charte graphique par dessus, celle qui repondra le mieux à tes attentes.
J'ai déjà testé le : JE fais mon jolie truc graphique avec puis je fais mon HTML. Ben je me suis planté
 

aminebousta a écrit :


Avec ce genre de forums on peut progresser assez vite mais si on reste dans le théorique sans jamais faire concrêtement des sites web et surtout des erreurs et des nuits à recorriger ton code, je pense que ce n'est pas bon.


Sans ce forum,  sans des gens commes Masklinn et FlorentG, je serai encore à faire du tableau et je ferai encore des imbrications de DIV inutiles.  
donc +100000 pour ce forum et les pros qui le font vivre.

Reply

Marsh Posté le 02-07-2005 à 15:21:34    

aminebousta a écrit :

Mais j'ai une question concernant les arguments des méthodes JS. Comment fais-tu quand tu dois appeler une méthode qui possède plusieurs arguments?
Imaginons que les arguments ne dépendent pas cette fois-ci du nom de la classe.
Si on prend l'exemple d'un tableau avec plusieurs TR.  
On veut y mettre des onClick. Les TR ont tous le même class et appellent la même méthode JS.
Mais chacun affiche une alert avec un message différent (l'argument).
Où déclarerais-tu cet argument?
Dans le TR du fichier html?  
Ou encore avec du JS non obtrusif?


Tout d'abord, les évènements JS natif n'ont qu'un seul argument, e (l'objet évènement, indisponible sous MSIE pour lequel on doit récupérer window.event).
 
Ensuite
 
Le javascript étant fait pour améliorer l'expérience de l'utilisateur il y a deux possibilités:
1- L'argument ou la donnée est externe au HTML et dépend uniquement du JS, on la met dans le JS
2- L'argument, la donnée, fait partie du HTML mais on l'utilise également dans le JS, à ce moment là on va parser le DOM comme un grand pour récupérer la donnée.
Pas de passage d'argument per se, mais récupération de la donnée depuis sa localisation.


Message édité par masklinn le 02-07-2005 à 15:22:02

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-07-2005 à 10:09:30    

Bonjour tout le monde,
 
Gatsusat : D'accord je comprends ce que tu veux dire.  
Comme ton "coup de gueule" était juste après ma question je n'avais pas compris le rapport avec les posts précédents c'est pour ça que je voulais savoir à qui ça s'adressait.
 
Masklinn :  
Merci beaucoup de partager ton expérience.
Je ne comprends toujours pas pourquoi MSIE a décidé de s'écarter à ce point du JS natif...
 
Quel sens prend le mot "expérience" dans ta phrase? Je ne connais pas l'usage de ce mot dans ce contexte donc je n'ai pas compris le sens de ta phrase.
 
J'ai rencontré un cas très précis avant-hier concernant ton code.
J'ai un tag JSP (de la librairie MyFaces) qui génère un tableau html.
Mais pour les TR du tableau il ne permet que de déclarer la propriété "class".  
Or je voulais mettre un onClick sur chaque TR qui recharge la fenêtre avec des paramètres dans l'url qui sont différents pour chaque TR.
J'ai utilisé le code que tu as mis pour retrouver le TR à partir de son class.
Dans la fonction déclarée j'ai ajouté l'argument "this" pour récupérer l'objet "TR" cliqué.  
Comme je savais que les paramètres de l'url à calculer se basaient sur le nom de l'id d'une balise span imbriquée deux niveaux plus loin par rapport au TR j'ai récupéré la donnée en faisant this.children[0].children[0].
 
Ca a marché, et je pense qu'il s'agit de ta solution (2).
 
Mais je n'aime pas vraiment mettre des choses en dur comme "0". Je trouve que cette méthode marche parceque je connais le code html et donc qu'il ne pourra pas s'adapter à d'autres situations à moins de le modifier.  
 
C'est pour ça que je voulais savoir si tu utilisais d'autres techniques pour récupérer les données.
Le plus simple aurait été, je pense, de mettre tous les paramètres dans le "id" du TR.
Mais malheureusement dans mon cas ce n'est pas possible.
 

Reply

Marsh Posté le 03-07-2005 à 10:57:58    

aminebousta a écrit :

Merci beaucoup de partager ton expérience.
Je ne comprends toujours pas pourquoi MSIE a décidé de s'écarter à ce point du JS natif...


Parce qu'en fait je me suis mal exprimé, ce ne sont pas les évènements du "js natif" (le js natif c'est un langage de prog, il n'y a pas de hooks dans le HTML). Ce sont des évènements DOM (Dom Events), mais au cours de la browser war, alors que le DOM n'était pas finalisé, NS et MS implémentaient chacun le sien. Quand le DOM & DOM Events sont sortis, la majorité l'a adoptée mais MS a préféré conserver son modèle DOM + Events propriétaire.

Citation :

Quel sens prend le mot "expérience" dans ta phrase? Je ne connais pas l'usage de ce mot dans ce contexte donc je n'ai pas compris le sens de ta phrase.


Heuuu en fait je sais pas si c'est français, c'est la traduction littérale de "User Experience", mais je pense que ça l'est puisque je ne vois pas par quoi le remplacer.
 
En gros, faire l'expérience de quelque chose c'est l'expérimenter, le tester, et ça laisse des impressions. L'expérience de l'utilisateur, ce sont ces impressions et elles sont plus ou moins agréables/bonnes.
 
Le principe ici, c'est que tu crées et finalises un site complet HTML/CSS en essayant de rendre son utilisation et sa navigation les plus agréables possibles, mais le HTML a des contraintes, donc après avoir terminé le site tu peux ajouter des "corrections" en JS non obtrusif, comme des validations de formulaires (sans retirer les validations du côté serveur) ou des chargements rapides à coup de xmlHttpRequest. Tu rends le site plus agréable/pratique/sympa/facile à utiliser pour les gens dont l'UA gère le javascript sans dégrader l'utilisation pour les gens ne l'ayant pas. Donc tu améliores l'expérience de l'utilisateur sur ton site si celui ci a activé le javascript sans la diminuer si il ne l'a pas activé. C'est ce qu'on appelle les Améliorations Progressives (progressive enhancements). On travaille par couche, et au delà de la couche native (HTML, la donnée) toutes les couches ont pour but de rendre le site plus agréable à utiliser sans jamais être "nécessaires" (donc on peut les désactiver et s'en passer sans que le site devienne inutilisable).
 
Exemple parmis tant d'autres: http://elsewhere.adactio.com
Navigue un peu avec le javascript activé, puis refait de même après avoir désactivé le javascript, et compare.

Citation :

J'ai rencontré un cas très précis avant-hier concernant ton code.
J'ai un tag JSP (de la librairie MyFaces) qui génère un tableau html.
Mais pour les TR du tableau il ne permet que de déclarer la propriété "class".  
Or je voulais mettre un onClick sur chaque TR qui recharge la fenêtre avec des paramètres dans l'url qui sont différents pour chaque TR.
J'ai utilisé le code que tu as mis pour retrouver le TR à partir de son class.
Dans la fonction déclarée j'ai ajouté l'argument "this" pour récupérer l'objet "TR" cliqué.  
Comme je savais que les paramètres de l'url à calculer se basaient sur le nom de l'id d'une balise span imbriquée deux niveaux plus loin par rapport au TR j'ai récupéré la donnée en faisant this.children[0].children[0].
 
Ca a marché, et je pense qu'il s'agit de ta solution (2).


grosso modo oui, mais il n'y a pas besoin de rajouter d'argument, this est un objet natif des évènements

Citation :

Mais je n'aime pas vraiment mettre des choses en dur comme "0". Je trouve que cette méthode marche parceque je connais le code html et donc qu'il ne pourra pas s'adapter à d'autres situations à moins de le modifier.


t'as pas nécessairement le choix, il est difficile de génériciser le fait de marcher le DOM [:spamafote]  

Citation :

C'est pour ça que je voulais savoir si tu utilisais d'autres techniques pour récupérer les données.


Pas spécialement, après il faut savoir qu'il y a beaucoup d'autres fonctions, et que des choses comme getElementsByTagName s'appliquent à n'importe quelle node, donc tu pouvais faire "monTR.getElementsByTagName('SPAN')" et tu récupérais uniquement les spans situés dans ton TR.
 
Pour plus d'infos sur le DOM, http://www.quirksmode.org/ dans le menu de gauche tu sélectionnes "W3C DOM" puis "Tests" (tu peux également lire le reste, bien sûr, ce serait même une bonne idée)


Message édité par masklinn le 03-07-2005 à 11:12:16

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-07-2005 à 18:10:32    

Encore merci ! :)
 
J'ai bien compris ce que tu voulais dire par l'expérience utilisateur.
Ca doit être un travail de dingue d'essayer de rendre un code JS compatible avec tous les browsers. C'est regrettable qu'ils n'aient pas pu s'accorder un peu plus.
 
Le site dont tu m'as filé le lien est vraiment super. Très complet et pédégogique. Ca va encore me gacher des soirées ça...  
Ton lien en signature "créez vos sites web" n'est pas mal non plus.
 
Moi qui n'ai jamais aimé le JS je crois que ça commence à m'intéresser là...
 
 
[...]  
 
Je viens de relire encore ton post.  
Tu dis  
"grosso modo oui, mais il n'y a pas besoin de rajouter d'argument, this est un objet natif des évènements"
 
Ca veut dire que onMouseClick="fonction()" et onMouseClick="fonction(this)" c'est pareil?
Pourtant j'ai très souvent vu "this" appelé en argument dans des scripts publics.
A quoi ça sert de le préciser si c'est déjà un objet natif?
Encore des histoires de compatibilité de browsers??


Message édité par aminebousta le 03-07-2005 à 18:12:03
Reply

Marsh Posté le 03-07-2005 à 18:45:10    

aminebousta a écrit :

Ca veut dire que onMouseClick="fonction()" et onMouseClick="fonction(this)" c'est pareil?
Pourtant j'ai très souvent vu "this" appelé en argument dans des scripts publics.
A quoi ça sert de le préciser si c'est déjà un objet natif?
Encore des histoires de compatibilité de browsers??


En fait c'est plus compliqué que ça.
 
La méthode que tu utilises ici est l'appel inline, une chose à tenter d'éviter (lire quirksmode, c'est entre autre écris dedans): tu utilises <balise onevent=""/>.
 
Tu as l'impression d'appeler une fonction, mais ce n'est pas exactement le cas. Ici, derrière la scène, le navigateur va récupérer le string d'argument et le wrapper: ce que tu mets entre "" dans ton onevent va en fait être placé dans une fonction évènement anonyme.
 
J'arrive pas trop à expliquer, mais en gros
 
<balise onevent="code"/>
va être transformé en
balise.onevent = function () { eval(code) }
pendant le parsing.
(eval sert à transformer un string en code javascript exécutable, et l'exécute)
 
Donc ton code est inclus dans une fonction anonyme qui est une méthode de l'objet balise.
 
Donc au sein de la fonction anonyme il est possible d'appeler "this" (qui mène vers l'objet balise) mais pas dans les fonctions subsidiaires, ce qui signifie que tu dois l'utiliser explicitement si tu en as besoin dans ton code.
 
Maintenant imaginons que tu aies
<balise id="monIdDeBalise"/>
Si tu crées un code javascript dans un fichier complètement indépendant qui va récupérer ton objet par
var balise = document.getElementById('monIdDeBalise');
 
Alors tu pourras faire  

balise.onevent = function (e) {
    code
}


Avantages:
1- Sous les navigateurs autres qu'Internet Explorer tu peux accéder à l'évènement (objet "e" ici). Pourquoi autres qu'IE? Parce que dans la mesure ou IE ne passe les évènements que via window.event tu pouvais déjà y accéder en inline.
2- Tu peux utiliser directement "this" dans ton code, donc là ou avant tu avais un code du type

function myEventFunction(objet) {
    blablabla;
    objet.machin = bidule;
}


et

<balise onevent="myEventFunction(this)"/>


tu peux maintenant faire

function myEventFunction(event) {
    blablabla;
    this.machin = bidule;
}
balise.onevent = myEventFunction;


 
Avoir un code déporté de cette manière, sans aucun appel de javascript dans le code HTML, permet de séparer complètement le contenu/la donnée (HTML) et le comportement (Javascript), de même qu'on sépare le contenu du style/affichage/contenant (CSS)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-07-2005 à 19:38:35    

En fait je n'ai pas pris le temps de recopier ce que j'ai fait vendredi, ce qui a pu porter à confusion.
 
Je ne peux pas faire de onevent sur ma balise TR.
Le tag JSP que j'utilise ne m'autorise qu'à une chose : préciser le class. Je ne peux donc pas non plus mettre de id.
 
Voici ce que j'ai :  
 
Dans le code HTML :  
 

Code :
  1. <TR class="list-row-even">


 
Dans un fichier JS à part qui ne sert qu'à faire la correspondance entre mes fonctions JS et un class :  
 

Code :
  1. function checkTRs() {
  2.     if(!document.getElementsByTagName)
  3.         return;
  4.     var rows = document.getElementsByTagName('TR');
  5.     for(var i=rows.length-1; i>=0; --i)
  6.         if(rows[i].className.indexOf('list-row') != -1)
  7.             rows[i].onclick = function (e) { 
  8.                     clickOnRow(this);
  9.                 }
  10. }
  11. window.onload = checkTRs;

 
 
Dans un deuxième fichier JS qui ne s'occupe que des traitements :  
 

Code :
  1. function clickOnRow(trElement) {
  2.      var rowId=trElement.children[0].children[0];
  3.      etc.......
  4. }


 
 
Donc le this, je l'ai mis dans le premier fichier JS qui ne sert qu'à retrouver les TRs qui ont un certain class et leur associe à chacun une méthode de traitement stockée dans un autre fichier JS.  
Cette dernière méthode cherchant elle-même les arguments en parsant le DOM.
 
D'après ce que j'ai compris j'aurais pu me passer de préciser "this" finalement.


Message édité par aminebousta le 03-07-2005 à 19:39:38
Reply

Marsh Posté le 03-07-2005 à 20:10:36    

aminebousta a écrit :

Code :
  1. function checkTRs() {
  2.     if(!document.getElementsByTagName)
  3.         return;
  4.     var rows = document.getElementsByTagName('TR');
  5.     for(var i=rows.length-1; i>=0; --i)
  6.         if(rows[i].className.indexOf('list-row') != -1)
  7.             rows[i].onclick = function (e) { 
  8.                     clickOnRow(this);
  9.                 }
  10. }
  11. window.onload = checkTRs;

 
 
Dans un deuxième fichier JS qui ne s'occupe que des traitements :  
 

Code :
  1. function clickOnRow(trElement) {
  2.      var rowId=trElement.children[0].children[0];
  3.      etc.......
  4. }


 
 
Donc le this, je l'ai mis dans le premier fichier JS qui ne sert qu'à retrouver les TRs qui ont un certain class et leur associe à chacun une méthode de traitement stockée dans un autre fichier JS.  
Cette dernière méthode cherchant elle-même les arguments en parsant le DOM.
 
D'après ce que j'ai compris j'aurais pu me passer de préciser "this" finalement.


Tu te complexifies la vie pour rien surtout [:spamafote]

Citation :

Code :
  1. function modifyTRs() {
  2.     if(!document.getElementsByTagName)
  3.         return;
  4.     var rows = document.getElementsByTagName('TR');
  5.     for(var i=rows.length-1; i>=0; --i)
  6.         if(rows[i].className.indexOf('list-row') != -1)
  7.             rows[i].onclick = function (e) { 
  8.                     var rowId=this.children[0].children[0];
  9.                     etc.......
  10.                 }
  11. }
  12. window.onload = checkTRs;



Et voilà, inutile d'appeler une fonction depuis une fonction depuis une fonction, ton code JS sert à effectuer les traitements et c'est tout [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-07-2005 à 20:50:17    

Oui on peut aussi faire directement le traitement là-dedans.
C'est exactement ton code au début du topic en fait.
 
Bon, moi pour des raisons précises d'organisation j'ai besoin de séparer le traitement dans un fichier à part, mais j'ai en tous cas bien compris l'histoire du this et à partir d'où il est "appelable".
 
Merci encore pour le temps que tu as pris pour ces explications.  
(et pour les liens)
 
@+

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed