Accueil > Forum > > > > L'élément document et le reste...
L'élément document et le reste...
vendredi 7 mai 2010 à 15:16:59 |
L'élément document et le reste...

alexflex25
|
Bonjour,
En désespoir de cause je viens vous demander de l'aide une n-ème fois.
Soit la class javascript suivante :
Code Javascript :
var alerting = Class.create({
initialize: function(){
},
alerter: function(condition){
if(condition == true){
alert('alert');
}
}
});
Soit le code exécuté suivant:
Code Javascript :
Event.observe(window,'load',function (){
Event.observe(document,'click',function(){
var a = new alerting();
a.alerter(true);
});
Event.observe($('menu_nv_1'),'click',function(){
var a = new alerting();
a.alerter(false);
});
});
Ma question est la suivante:
Pourquoi lorsque je clique sur mon élément "menu_nv_1" j'ai mon message d'alerte qui s'affiche?
Je pense qu'il s'agit d'un "pseudo héritage" des méthodes attaché à l'élément "document" dans tous les autres objet du document.
Dans le cas ou ma "pseudo explication" soit la bonne j'aimerais savoir s'il y a une solution.
Merci d'avance.
|
|
vendredi 7 mai 2010 à 18:59:04 |
Re : L'élément document et le reste...

PetoleTeam
|
Réponse acceptée !
Bonjour,
ce n'est pas le message de l'élément "menu_nv_1" qui s'affiche mais celui du document.
C'est un problème de propagation.
La solution est de stopper celle ci en modifiant ton appel comme suit
Code Javascript : Event.observe(window,'load',function (){
Event.observe(document,'click',function(){
var a = new alerting();
a.alerter('Bonjour du document');
});
//-- Appel modifie
Event.observe($('menu_nv_1'),'click',function(e){ // ajout parametre e
var a = new alerting();
a.alerter('Bonjour de menu_nv_1');
e.stop(); // stoppe la propagation
});
});
;O)
|
|
dimanche 9 mai 2010 à 10:35:26 |
Re : L'élément document et le reste...

alexflex25
|
Bonjour,
Merci beaucoup pour cette solution, grâce à cela j'ai pu rechercher de la documentation pour en apprendre plus sur la "propagation" en JavaScript.
Pour aller plus loin voici un autre petit challenge qui me pose à nouveau le même type de problème?
Sur le même plan...
Soit la classe suivante:
Code Javascript :
var alerting = Class.create({
initialize: function(obj){
this.obj = obj;
},
alerter: function(condition){
if(condition == true){
this.obj.onclick = new Function ("alert('exemple parmis tant dautre')");
}
}
});
Soit le code suivant:
Code Javascript :
Event.observe(window,'load',function (){
var a = new alerting(document);
a.alerter(true);
var b = new alerting($('menu_nv_1'));
b.alerter(false);
var c = new alerting($('menu_nv_2'));
c.alerter(false);
});
Le problème et le même que précédemment mais cette fois ci je ne vois pas ou stopper la propagation, pour que dans tout le document une alerte s'affiche à chaque clic, sauf dans le cas ou je clique sur les éléments "menu_nv_1" et "menu_nv_2".
Merci d'avance.
PS: Si la réponse est aussi simple que pour ma première question j'accepterai la réponse : "Réfléchi!"
|
|
dimanche 9 mai 2010 à 15:16:37 |
Re : L'élément document et le reste...

PetoleTeam
|
Réponse acceptée !
Bonjour,
Première remarque :
Préféres les fonctions anonyme que la création de celle ci avec la syntaxe new Function, moins clair à mettre en oeuvre entre autres.
Deuxième remarque :
Lorsque tu cliques sur un élément du document, si celui ci n'a pas d'événement associé c'est le document qui le reçoit, ce qui veut dire qu'il faut mettre un événement sur tes DIVs leur indiquant de ne rien faire. En clair onclick = stopPropagation.
Troisième remarque :
Comme tu utilises une bibliothèque, autant en utiliser ses fonctionnalités, d'autant qu'il y a 2 façon de gérer les événement, une globale, IExplorer et une affectée à chaque objet, FireFox, Opéra, Safari ( voir le e en paramètre dans l'exemple ci aprés)...
exemple pour bien voir la remarque 2
Code Javascript : var alerting = Class.create({
initialize: function (obj_, param_) {
this.obj = obj_;
obj_.param = param_; // pour bien voir
},
alerter: function (condition) {
if (condition == true) {
this.obj.onclick = function (e) {
alert('onclick :\n' + this.param);
if (e) {
alert('e existe !'); // pour bien voir
e.stopPropagation();
e.preventDefault();
} else {
alert('event existe !'); // pour bien voir
event.cancelBubble = true;
event.returnValue = false;
}
}
}
}
});
Event.observe(window, 'load', function () {
var a = new alerting(document, 'Click sur document');
a.alerter(true);
var b = new alerting($('menu_nv_1'), 'Hello! de menu_nv_1');
b.alerter(true);
var c = new alerting($('menu_nv_2'));
c.alerter(false);
});
pour tenir compte de la remarque 3 il est préférable d'écrire
Code Javascript : if (condition == true) {
Event.observe(this.obj, 'click', function (e) {
alert('onclick :\n' + this.param);
e.stop();
});
}
l'écriture en est du coup allégée
Il te reste donc a affecter un non événement sur les objets que tu ne veux pas faire entrer en jeu...
"Réfléchi!", tu ne sera pas loin de ton premier code...
;O)
|
|
dimanche 9 mai 2010 à 16:51:56 |
Re : L'élément document et le reste...

alexflex25
|
Bonjour
Première remarque bien pris en compte...
La deuxième remarque m'oblige donc à attribuer une action "vide" à l'événement "click" sur mes "objets" à exclure, uniquement dans le but intercepter l'événement (click) pour qu'il ne soit pas transmis au document.
Merci pour la troisième remarque.
Voila ma conclusion :
Code Javascript :
var alerting = Class.create({
initialize: function (obj, message) {
this.obj = obj;
// obj_.param = param_; // Pour une raison d'habitude j'ai préféré faire
this.message = message; // ceci (+ voir "cela")
},
alerter: function (condition) {
if (condition == true) {
Event.observe(this.obj, 'click', function (e) {
alert('onclick :\n' + this.message);
e.stopPropagation();
}.bind(this)); // cela
}else{
Event.observe(this.obj, 'click', function (e) { //Pour les remarques 2 et 3
e.stopPropagation(); //Pour les remarques 2 et 3
}); //Pour les remarques 2 et 3
}
}
});
Event.observe(window, 'load', function () {
var a = new alerting(document, 'Click sur document');
a.alerter(false);
var b = new alerting($('menu_nv_1'), 'Hello! de menu_nv_1');
b.alerter(true);
var c = new alerting($('menu_nv_2'), 'Hello! de menu_nv_2');
c.alerter(true);
});
Je viens de remarquer une chose à l'instant toujours en gardant la même Class.
Ce code fonction correctement sans aucun problème.
Code Javascript :
Event.observe(window, 'load', function () {
var a = new alerting(document, 'Click sur document');
a.alerter(false); //ici
var b = new alerting($('menu_nv_1'), 'Hello! de menu_nv_1');
b.alerter(true); //ici
var c = new alerting($('menu_nv_2'), 'Hello! de menu_nv_2');
c.alerter(true); //ici
});
En revanche celui-ci pose un problème lors de l'utilisation des boutons "droit" et "central" de la souris.
Code Javascript :
Event.observe(window, 'load', function () {
var a = new alerting(document, 'Click sur document');
a.alerter(true); //la
var b = new alerting($('menu_nv_1'), 'Hello! de menu_nv_1');
b.alerter(false); //la
var c = new alerting($('menu_nv_2'), 'Hello! de menu_nv_2');
c.alerter(false); //la
});
le message "Click sur document" apparait dans le cas ou je clic sur "menu_nv_1" ou "menu_nv_2" avec le bouton "droit" ou "central" de la souris... Alors que le bouton "gauche" ne pose pas de problème...
Pour encore abuser de ton temps pourrais-je te demander comment as-tu fais pour acquérir une tel connaissance en javascript. Tu aurais peut-être quelque site ou ouvrage à me recommander.
Dans tous les cas merci de ton aide.
|
|
dimanche 9 mai 2010 à 19:27:11 |
Re : L'élément document et le reste...

PetoleTeam
|
en premier lieu il est effectivement important de bien savoir ce que l'on veut comme réaction.
Dans ton cas il est peu être important de ne pas stopper la propagation lorsque tu cliques sur le document.
Dans la fonction onclick il est tout à fait envisageable de tester le bouton appuyé et de réagir en fonction.
...comment as-tu fais pour acquérir une tel connaissance en javascript...
c'est gentil mais sache que j'ignore bien plus de choses que je n'en connais...
il existe une multitude de sites bien fait
- developer.mozilla
- msdn.microsoft
- w3schools
- ...etc...
et encore tous pleins d'autres, sans oublier les tutoriaux ou autres FAQs des différents forums...
* c'est forgeant que l'on devient vachement fatigué...
* il ne sert à rien de réinventer la roue si ce n'est pour comprendre comment elle marche...
;O)
|
|
dimanche 9 mai 2010 à 19:36:44 |
Re : L'élément document et le reste...

PetoleTeam
|
jai oublié de te signaler
Code Javascript : à la place de Code Javascript :
;O)
|
|
Cette discussion est classée dans : élément, function, code, var, document
Répondre à ce message
Sujets en rapport avec ce message
Variable retour de function [ par bydouille ]
Bonjour, Je désire faire et utiliser une function qui me renvoie le contenu d'une ligne de tableau (3 cellules) avec comme id : cell-1, cell-2, cell-
unterminated string literal [ par kangun ]
Bonjour. je me tourne vers vous suite à un problème apparut sur un java script. en effet, je souhaite afficher une bulle au dessus d'une image et chan
Aide a la création d'une fonction [ par kyoku59 ]
Bonjour. Voila j'ai cette fonction : [code=js] function heures() { var tabHeure= new Array("01","02","03", "04", "05","06","07", "08"
recharger les variables suite à un reload [ par goyave ]
bonjour suite à un changement de machine et de prog je me trouve confronté à un probleme enervant j'ai un formulaire avec les champs [code=autre]nom
Liste déroulante qui masque la suivante si "non selectionné" [ par scoal ]
Bonjour, J'ai 3 liste déroulante qui s'enchaine, le contenue de la seconde dépend du "select" de la première et de même pour la troisième en fonction
Function qui ne functionne pas... [ par Xiarea ]
Bonjour, Je suis entrain d'essayer de faire ouvrir un popup lors d'un double clic sur une image. La nouvelle page doit connaitre les coordonées de la
Alternance entre divs [ par Trashful ]
Bonjour à tous, J'ai un petit problème et j'espère que votre communauté sera en mesure de corriger mes petites erreurs. N'étant pas un professionnel
Pb de validation d'un formualaire [ par HovOne ]
Bonsoirje souhaite valider ce formulaire html/php via un script en JS[quote] "http://www.w3.org/TR/2000/REC-xhtml1-2
modification lightbox .... bouton close en haut a droite [ par petardier ]
bonjour,je souhaite modifier une light box en mettant le bouton close en haut a gauche , plutot qu'en bas.Ainsi, quand une image est plus grande que l
code html comme cookie [ par g_fuck ]
salut! j'ai un code JS servant a storer des cookies : function SetCookie (name, value) { var argv = SetCookie.a
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|