bon j'ai pour habitude de faire un truc genre
<img id='myid' ... onmousedown='fct(this, event);'>
ma fonction etant
function fct(obj, ev)
{
}
jusque la tout va bien, ca me permet d'avoir l'objet event sous ie et
l'objet ev sous firefox
mais a un moment j'affecte dynamiquement null a la methode onmousedown de
myid
getElementById('myid').onmousedown = null;
mais comment je fait apres pour remettre fct(this, event); sur l'evenement
jusque la je faisais
getElementById('myid').onmousedown = function anonymous() {fct(this,
event);};
mais je ne m'etais jamais apercu que cela ne marchait pas du tout sous
firefox.
le ev que je recois n'est pas du tout bon.
ou plus exactement, le event de
getElementById('myid').onmousedown = function anonymous() {fct(this,
event);};
n'existe pas !
alors comment faire
pourquoi ca marche dans le html et pas en javascript !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
ASM
[création ou re-création d'events à la volée]
rechercher sur Google : AddEvent pour apprendre sans doute beaucoup de choses à ce sujet
Mais ... on n'en avait pas déjà un peu parlé lors du pb du shift ? http://groups.google.com/group/fr.comp.lang.javascript/msg/adebec3935d3b70?rnum=1
regarder : http://developer.mozilla.org/fr/docs/DOM:event en bas les Méthodes
à tous zzazzards en supposant qu'on puisse s'éviter de trop nombreues lignes :
jusque la je faisais getElementById('myid').onmousedown = function anonymous() { fct(this, event);};
getElementById('myid').onmousedown = function() {fct(this, event);}; ou getElementById('myid').onmousedown = Function("fct(this, event);"); ou getElementById('myid').onmousedown = "fct(this, event);";
ou (bien que ce ne soit pas censé servir à çà) : getElementById('myid').setAttribute = 'fct(this,event);'; ou getElementById('myid').onmousedown = new fct(this, event);
-- Stephane Moriaux et son [moins] vieux Mac
[création ou re-création d'events à la volée]
rechercher sur Google : AddEvent
pour apprendre sans doute beaucoup de choses à ce sujet
Mais ...
on n'en avait pas déjà un peu parlé lors du pb du shift ?
http://groups.google.com/group/fr.comp.lang.javascript/msg/adebec3935d3b70?rnum=1
regarder :
http://developer.mozilla.org/fr/docs/DOM:event
en bas les Méthodes
à tous zzazzards
en supposant qu'on puisse s'éviter de trop nombreues lignes :
jusque la je faisais
getElementById('myid').onmousedown = function anonymous() {
fct(this, event);};
getElementById('myid').onmousedown = function() {fct(this, event);};
ou
getElementById('myid').onmousedown = Function("fct(this, event);");
ou
getElementById('myid').onmousedown = "fct(this, event);";
ou
(bien que ce ne soit pas censé servir à çà) :
getElementById('myid').setAttribute = 'fct(this,event);';
ou
getElementById('myid').onmousedown = new fct(this, event);
rechercher sur Google : AddEvent pour apprendre sans doute beaucoup de choses à ce sujet
Mais ... on n'en avait pas déjà un peu parlé lors du pb du shift ? http://groups.google.com/group/fr.comp.lang.javascript/msg/adebec3935d3b70?rnum=1
regarder : http://developer.mozilla.org/fr/docs/DOM:event en bas les Méthodes
à tous zzazzards en supposant qu'on puisse s'éviter de trop nombreues lignes :
jusque la je faisais getElementById('myid').onmousedown = function anonymous() { fct(this, event);};
getElementById('myid').onmousedown = function() {fct(this, event);}; ou getElementById('myid').onmousedown = Function("fct(this, event);"); ou getElementById('myid').onmousedown = "fct(this, event);";
ou (bien que ce ne soit pas censé servir à çà) : getElementById('myid').setAttribute = 'fct(this,event);'; ou getElementById('myid').onmousedown = new fct(this, event);
jusque la tout va bien, ca me permet d'avoir l'objet event sous ie et l'objet ev sous firefox
oui puisque IE propose window.event, donc accessible par event dans le scope global (tout ce qui est dans window est en réalité le scope global) et que FX fourni l'objet event au moment du déclenchement du mousedown.
mais comment je fait apres pour remettre fct(this, event); sur l'evenement jusque la je faisais getElementById('myid').onmousedown = function anonymous() {fct(this, event);};
mais je ne m'etais jamais apercu que cela ne marchait pas du tout sous firefox. le ev que je recois n'est pas du tout bon. pourquoi ca marche dans le html et pas en javascript !
parce ce que en HTML, le navigateur fait un peu le travail pour nous et aussi parce que le scope accessible n'est pas le même. Alors que en javascript, quand on définit une fonction, l'objet "event" est supposé être le paramêtre fournit. (j'en ai absolument aucune idée pour les vieux netscape 4 évidemment)
Cependant je me demande pourquoi créer une function pour transmettre l'élément (this) et l'événement (event) <div onclick="fct(this,event)"> quand <div onclick="fct(event)"> aurait suffit, puisque this (le propriétaire de la function) est accessible et représente bien l'élément <div> cliqué quand la function fct est appellée (sauf si on utilise le modèle d'événement microsoft, mais là on est en modèle traditionnel). Et même si le this n'était pas accessible on doit pouvoir s'en sortir en allant chercher la cible de l'event (event.srcElement pour FX, window.event.target pour IE et éventuellement window.event.target.parentNode pour IE quand le nodetype de la cible est un node texte).
// nodeType 3 = document.TEXT_NODE // mais bien sûr IE ne connait pas document.TEXT_NODE // non testé, c'est pour l'idée seulement function getTargetElement(evt) { return (evt.srcElement)? evt.srcElement:(evt.target)? (evt.target.nodeType == 3)? evt.target.parentNode:evt.target:null; }
Mais c'est au delà de cette conversation je pense, plein de bonne literrature sur : http://www.quirksmode.org/js/events_tradmod.html
jusque la tout va bien, ca me permet d'avoir l'objet event sous ie et
l'objet ev sous firefox
oui puisque IE propose window.event, donc accessible par event dans le
scope global (tout ce qui est dans window est en réalité le scope
global) et que FX fourni l'objet event au moment du déclenchement du
mousedown.
mais comment je fait apres pour remettre fct(this, event); sur l'evenement
jusque la je faisais
getElementById('myid').onmousedown = function anonymous() {fct(this,
event);};
mais je ne m'etais jamais apercu que cela ne marchait pas du tout sous
firefox.
le ev que je recois n'est pas du tout bon.
pourquoi ca marche dans le html et pas en javascript !
parce ce que en HTML, le navigateur fait un peu le travail pour nous et
aussi parce que le scope accessible n'est pas le même.
Alors que en javascript, quand on définit une fonction, l'objet "event"
est supposé être le paramêtre fournit. (j'en ai absolument aucune idée
pour les vieux netscape 4 évidemment)
Cependant je me demande pourquoi créer une function pour transmettre
l'élément (this) et l'événement (event) <div onclick="fct(this,event)">
quand <div onclick="fct(event)"> aurait suffit, puisque this (le
propriétaire de la function) est accessible et représente bien l'élément
<div> cliqué quand la function fct est appellée (sauf si on utilise le
modèle d'événement microsoft, mais là on est en modèle traditionnel). Et
même si le this n'était pas accessible on doit pouvoir s'en sortir en
allant chercher la cible de l'event (event.srcElement pour FX,
window.event.target pour IE et éventuellement
window.event.target.parentNode pour IE quand le nodetype de la cible est
un node texte).
// nodeType 3 = document.TEXT_NODE
// mais bien sûr IE ne connait pas document.TEXT_NODE
// non testé, c'est pour l'idée seulement
function getTargetElement(evt)
{
return (evt.srcElement)?
evt.srcElement:(evt.target)?
(evt.target.nodeType == 3)?
evt.target.parentNode:evt.target:null;
}
Mais c'est au delà de cette conversation je pense, plein de bonne
literrature sur :
http://www.quirksmode.org/js/events_tradmod.html
jusque la tout va bien, ca me permet d'avoir l'objet event sous ie et l'objet ev sous firefox
oui puisque IE propose window.event, donc accessible par event dans le scope global (tout ce qui est dans window est en réalité le scope global) et que FX fourni l'objet event au moment du déclenchement du mousedown.
mais comment je fait apres pour remettre fct(this, event); sur l'evenement jusque la je faisais getElementById('myid').onmousedown = function anonymous() {fct(this, event);};
mais je ne m'etais jamais apercu que cela ne marchait pas du tout sous firefox. le ev que je recois n'est pas du tout bon. pourquoi ca marche dans le html et pas en javascript !
parce ce que en HTML, le navigateur fait un peu le travail pour nous et aussi parce que le scope accessible n'est pas le même. Alors que en javascript, quand on définit une fonction, l'objet "event" est supposé être le paramêtre fournit. (j'en ai absolument aucune idée pour les vieux netscape 4 évidemment)
Cependant je me demande pourquoi créer une function pour transmettre l'élément (this) et l'événement (event) <div onclick="fct(this,event)"> quand <div onclick="fct(event)"> aurait suffit, puisque this (le propriétaire de la function) est accessible et représente bien l'élément <div> cliqué quand la function fct est appellée (sauf si on utilise le modèle d'événement microsoft, mais là on est en modèle traditionnel). Et même si le this n'était pas accessible on doit pouvoir s'en sortir en allant chercher la cible de l'event (event.srcElement pour FX, window.event.target pour IE et éventuellement window.event.target.parentNode pour IE quand le nodetype de la cible est un node texte).
// nodeType 3 = document.TEXT_NODE // mais bien sûr IE ne connait pas document.TEXT_NODE // non testé, c'est pour l'idée seulement function getTargetElement(evt) { return (evt.srcElement)? evt.srcElement:(evt.target)? (evt.target.nodeType == 3)? evt.target.parentNode:evt.target:null; }
Mais c'est au delà de cette conversation je pense, plein de bonne literrature sur : http://www.quirksmode.org/js/events_tradmod.html
-- laurent
Etienne SOBOLE
oui puisque IE propose window.event, donc accessible par event dans le scope global (tout ce qui est dans window est en réalité le scope global) et que FX fourni l'objet event au moment du déclenchement du mousedown.
ok.
parce ce que en HTML, le navigateur fait un peu le travail pour nous et aussi parce que le scope accessible n'est pas le même. Alors que en javascript, quand on définit une fonction, l'objet "event" est supposé être le paramêtre fournit. (j'en ai absolument aucune idée pour les vieux netscape 4 évidemment)
Oui j'avoue que je limite mes tests a IE FireFox Safari et opera
Pour IE on devrait faire getById('myid').onmousedown = function() { fct(this, window.event); }; Et pour FX (et certainement d'autres) on devrait faire getById('myid').onmousedown = function(event) { fct(this, event); };
y a pas besoin du anonymous ??? semble que non! pourquoi je n'etais ca moi alors?
Donc pour tout le monde il faut faire ça getById('myid').onmousedown = function(event) { event = event?event:window.event; fct(this, event); }
Cependant je me demande pourquoi créer une function pour transmettre l'élément (this) et l'événement (event) <div onclick="fct(this,event)"> quand <div onclick="fct(event)"> aurait suffit, puisque this (le propriétaire de la function) est accessible et représente bien l'élément <div> cliqué quand la function fct est appellée (sauf si on utilise le modèle d'événement microsoft, mais là on est en modèle traditionnel). Et même si le this n'était pas accessible on doit pouvoir s'en sortir en allant chercher la cible de l'event (event.srcElement pour FX, window.event.target pour IE et éventuellement window.event.target.parentNode pour IE quand le nodetype de la cible est un node texte).
Bon j'avoue que ta question est legitime ! la raison est historique (va t on dire)
Il m'arrive d'appeler ces fonctions hors du context HTML par exemple supposons que ma fonction passe en rouge l'obj sur lequel tu cliques et que j'ai un bouton pour tout passer en rouge. dans ce cas, j'appelle la fonction en passant tous les objets obj dans le premier paramètre.
evidement tu vas me dire que
obj.fct(...) aurait eu me meme comportement.
ben... oui... mais bon a l'epoque ou j'ai commener a coder mon machin je n'y ai pas pensé, et apres j'ai décidé de garder les memes methodes de programmation.
l'autre raison, c'est que des fois je test le type de l'objet envoyé. et parfois c'est plus un objet mais un tableau d'objet. alors je sais que c'est pas térrible, mais je préfère avoir une fonction qui eventuellement intègre une boucle plutot que deux fonctions distintes.
bouh que c'est vilain... je sais...
// nodeType 3 = document.TEXT_NODE // mais bien sûr IE ne connait pas document.TEXT_NODE // non testé, c'est pour l'idée seulement function getTargetElement(evt) { return (evt.srcElement)? evt.srcElement:(evt.target)? (evt.target.nodeType == 3)? evt.target.parentNode:evt.target:null; }
Mais c'est au delà de cette conversation je pense, plein de bonne literrature sur : http://www.quirksmode.org/js/events_tradmod.html
-- laurent
merci en tout cas.
a bientot Etienne
oui puisque IE propose window.event, donc accessible par event dans le
scope global (tout ce qui est dans window est en réalité le scope global)
et que FX fourni l'objet event au moment du déclenchement du mousedown.
ok.
parce ce que en HTML, le navigateur fait un peu le travail pour nous et
aussi parce que le scope accessible n'est pas le même.
Alors que en javascript, quand on définit une fonction, l'objet "event"
est supposé être le paramêtre fournit. (j'en ai absolument aucune idée
pour les vieux netscape 4 évidemment)
Oui j'avoue que je limite mes tests a
IE
FireFox
Safari
et opera
Pour IE on devrait faire
getById('myid').onmousedown = function() { fct(this, window.event); };
Et pour FX (et certainement d'autres) on devrait faire
getById('myid').onmousedown = function(event) { fct(this, event); };
y a pas besoin du anonymous ???
semble que non! pourquoi je n'etais ca moi alors?
Donc pour tout le monde il faut faire ça
getById('myid').onmousedown = function(event)
{
event = event?event:window.event;
fct(this, event);
}
Cependant je me demande pourquoi créer une function pour transmettre
l'élément (this) et l'événement (event) <div onclick="fct(this,event)">
quand <div onclick="fct(event)"> aurait suffit, puisque this (le
propriétaire de la function) est accessible et représente bien l'élément
<div> cliqué quand la function fct est appellée (sauf si on utilise le
modèle d'événement microsoft, mais là on est en modèle traditionnel). Et
même si le this n'était pas accessible on doit pouvoir s'en sortir en
allant chercher la cible de l'event (event.srcElement pour FX,
window.event.target pour IE et éventuellement
window.event.target.parentNode pour IE quand le nodetype de la cible est
un node texte).
Bon j'avoue que ta question est legitime !
la raison est historique (va t on dire)
Il m'arrive d'appeler ces fonctions hors du context HTML
par exemple supposons que ma fonction passe en rouge l'obj sur lequel tu
cliques
et que j'ai un bouton pour tout passer en rouge. dans ce cas, j'appelle la
fonction en passant tous les objets obj dans le premier paramètre.
evidement tu vas me dire que
obj.fct(...)
aurait eu me meme comportement.
ben... oui...
mais bon a l'epoque ou j'ai commener a coder mon machin je n'y ai pas pensé,
et apres j'ai décidé de garder les memes methodes de programmation.
l'autre raison, c'est que des fois je test le type de l'objet envoyé. et
parfois c'est plus un objet mais un tableau d'objet.
alors je sais que c'est pas térrible, mais je préfère avoir une fonction qui
eventuellement intègre une boucle plutot que deux fonctions distintes.
bouh que c'est vilain... je sais...
// nodeType 3 = document.TEXT_NODE
// mais bien sûr IE ne connait pas document.TEXT_NODE
// non testé, c'est pour l'idée seulement
function getTargetElement(evt)
{
return (evt.srcElement)?
evt.srcElement:(evt.target)?
(evt.target.nodeType == 3)?
evt.target.parentNode:evt.target:null;
}
Mais c'est au delà de cette conversation je pense, plein de bonne
literrature sur :
http://www.quirksmode.org/js/events_tradmod.html
oui puisque IE propose window.event, donc accessible par event dans le scope global (tout ce qui est dans window est en réalité le scope global) et que FX fourni l'objet event au moment du déclenchement du mousedown.
ok.
parce ce que en HTML, le navigateur fait un peu le travail pour nous et aussi parce que le scope accessible n'est pas le même. Alors que en javascript, quand on définit une fonction, l'objet "event" est supposé être le paramêtre fournit. (j'en ai absolument aucune idée pour les vieux netscape 4 évidemment)
Oui j'avoue que je limite mes tests a IE FireFox Safari et opera
Pour IE on devrait faire getById('myid').onmousedown = function() { fct(this, window.event); }; Et pour FX (et certainement d'autres) on devrait faire getById('myid').onmousedown = function(event) { fct(this, event); };
y a pas besoin du anonymous ??? semble que non! pourquoi je n'etais ca moi alors?
Donc pour tout le monde il faut faire ça getById('myid').onmousedown = function(event) { event = event?event:window.event; fct(this, event); }
Cependant je me demande pourquoi créer une function pour transmettre l'élément (this) et l'événement (event) <div onclick="fct(this,event)"> quand <div onclick="fct(event)"> aurait suffit, puisque this (le propriétaire de la function) est accessible et représente bien l'élément <div> cliqué quand la function fct est appellée (sauf si on utilise le modèle d'événement microsoft, mais là on est en modèle traditionnel). Et même si le this n'était pas accessible on doit pouvoir s'en sortir en allant chercher la cible de l'event (event.srcElement pour FX, window.event.target pour IE et éventuellement window.event.target.parentNode pour IE quand le nodetype de la cible est un node texte).
Bon j'avoue que ta question est legitime ! la raison est historique (va t on dire)
Il m'arrive d'appeler ces fonctions hors du context HTML par exemple supposons que ma fonction passe en rouge l'obj sur lequel tu cliques et que j'ai un bouton pour tout passer en rouge. dans ce cas, j'appelle la fonction en passant tous les objets obj dans le premier paramètre.
evidement tu vas me dire que
obj.fct(...) aurait eu me meme comportement.
ben... oui... mais bon a l'epoque ou j'ai commener a coder mon machin je n'y ai pas pensé, et apres j'ai décidé de garder les memes methodes de programmation.
l'autre raison, c'est que des fois je test le type de l'objet envoyé. et parfois c'est plus un objet mais un tableau d'objet. alors je sais que c'est pas térrible, mais je préfère avoir une fonction qui eventuellement intègre une boucle plutot que deux fonctions distintes.
bouh que c'est vilain... je sais...
// nodeType 3 = document.TEXT_NODE // mais bien sûr IE ne connait pas document.TEXT_NODE // non testé, c'est pour l'idée seulement function getTargetElement(evt) { return (evt.srcElement)? evt.srcElement:(evt.target)? (evt.target.nodeType == 3)? evt.target.parentNode:evt.target:null; }
Mais c'est au delà de cette conversation je pense, plein de bonne literrature sur : http://www.quirksmode.org/js/events_tradmod.html