[Prototype] Event.observe ne marche qu'une fois

Le
Jérémie
Bonsoir à tous,

J'ai créé une petite application dans laquelle on navigue de semaine en
semaine avec des icônes en forme de flêches, ayant pour id
cmdSemaineSuivante et cmdSemainePrecedente.

Voici un fragment de JS qui me pose problème :

function bindForm(e)
{
changerSemaine(e);
Event.observe($('cmdSemainePrecedente'), 'click', changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click', changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', bindForm , false);





function changerSemaine(evt, typeInf)M
{
Event.stop(evt);

$('indicateur').style.visibility = "visible";
$('indicateur').style.display = "block";

var elt = Event.element(evt).id || '';

var dd = '';
var df = '';
var modeAffichage = $F('txtModeAffichage');
var infirmiere = $F('txtUtilisateur');
var centre = $F('lstCentre');


switch(elt)
{
case 'cmdSemainePrecedente':
dd = $F('txtDateDebutPrecedente');
df = $F('txtDateFinPrecedente');
break;
case 'cmdSemaineSuivante':
dd = $F('txtDateDebutSuivante');
df = $F('txtDateFinSuivante');
break;
default:
dd = $F('txtDateDebutActuelle');
df = $F('txtDateFinActuelle');
break;
}

getXhr();

[ instrcutions AJAX sasn intérêt ]

}

Ce qui est hyper bizarre, c'est que les Event.observe appliqués aux deux
icônes n'intercepte l'évènement qu'une fois, après ils ne réagissent plus.
J'ai encore un select (id lstCentre) qui lui fonctionne sans problème.

Verriez-vous une explication ?

Merci d'avance,

Jérémie
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #773906
Bonsoir à tous,

J'ai créé une petite application dans laquelle on navigue de semaine en
semaine avec des icônes en forme de flêches, ayant pour id
cmdSemaineSuivante et cmdSemainePrecedente.

Voici un fragment de JS qui me pose problème :

function bindForm(e)
{
changerSemaine(e);
Event.observe($('cmdSemainePrecedente'), 'click', changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click', changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', bindForm , false);


...


function changerSemaine(evt, typeInf)M
{
Event.stop(evt);
(snip code)

getXhr();

... [ instrcutions AJAX sasn intérêt ]


AMHA, au contraire, ce serait intéressant de savoir ce qui se passe ici...

}

Ce qui est hyper bizarre, c'est que les Event.observe appliqués aux deux
icônes n'intercepte l'évènement qu'une fois, après ils ne réagissent plus.
J'ai encore un select (id lstCentre) qui lui fonctionne sans problème.

Verriez-vous une explication ?


Une hypothèse au moins : tu remplaces cette partie de ton html via Ajax,
et tu ne 'rebinde' (ouch! c'est laid) pas les gestionnaire d'évènement
après.

Jérémie
Le #773905
"Bruno Desthuilliers" écrit dans le message de news: 4742b9c0$0$28306$
Bonsoir à tous,

J'ai créé une petite application dans laquelle on navigue de semaine en
semaine avec des icônes en forme de flêches, ayant pour id
cmdSemaineSuivante et cmdSemainePrecedente.

Voici un fragment de JS qui me pose problème :

function bindForm(e)
{
changerSemaine(e);
Event.observe($('cmdSemainePrecedente'), 'click', changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click', changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', bindForm , false);


...


function changerSemaine(evt, typeInf)M
{
Event.stop(evt);
(snip code)

getXhr();

... [ instrcutions AJAX sasn intérêt ]


AMHA, au contraire, ce serait intéressant de savoir ce qui se passe ici...

}

Ce qui est hyper bizarre, c'est que les Event.observe appliqués aux deux
icônes n'intercepte l'évènement qu'une fois, après ils ne réagissent
plus.
J'ai encore un select (id lstCentre) qui lui fonctionne sans problème.

Verriez-vous une explication ?


Une hypothèse au moins : tu remplaces cette partie de ton html via Ajax,
et tu ne 'rebinde' (ouch! c'est laid) pas les gestionnaire d'évènement
après.



Super, c'est exactement ça, merci!! Il suffisait de redemander un
"rebindage" (encore pire!) après le traitement de la réponse AJAX. J'ai donc
juste rajouté un bindForm(evt) dans changerSemaine.

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les valeurs
de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au niveau du
Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai bien
un [object].

Mystère et boule de gomme !


SAM
Le #773904

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les valeurs
de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au niveau du
Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai bien
un [object].


ça veut sans doute dire que cet [object] (evt ?) n'est pas suffisamment
défini pour lui

que dit alert(typeof(evt)); ?

Jérémie
Le #773903

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les
valeurs de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au
niveau du Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai
bien un [object].


ça veut sans doute dire que cet [object] (evt ?) n'est pas suffisamment
défini pour lui

que dit alert(typeof(evt)); ?


Entre temps j'ai un peu changer mon script, et il y a ceci de rajouté.
J'ai donc testé ce que tu m'as demandé dans ce contexte.

function init(event)
{
try {
alert(typeof(event)); // Renvoie object
// bindForm();
changerSemaine(event); // Un alert(typeof(evt)) dans cette
fonction renvoie undefined :-(
} catch(err) {
alert(err.name + " :n" + err.message);
}
}

function bindForm()
{
Event.observe($('cmdSemainePrecedente'), 'click' , changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click' , changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', init, false);


Jérémie
Le #773902

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les
valeurs de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au
niveau du Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai
bien un [object].


ça veut sans doute dire que cet [object] (evt ?) n'est pas suffisamment
défini pour lui

que dit alert(typeof(evt)); ?


Entre temps j'ai un peu changer mon script, et il y a ceci de rajouté.
J'ai donc testé ce que tu m'as demandé dans ce contexte.

function init(event)
{
try {
alert(typeof(event)); // Renvoie object
// bindForm();
changerSemaine(event); // Un alert(typeof(evt)) dans cette
fonction renvoie undefined :-(
} catch(err) {
alert(err.name + " :n" + err.message);
}
}

function bindForm()
{
Event.observe($('cmdSemainePrecedente'), 'click' , changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click' , changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', init, false);


SAM
Le #773900

que dit alert(typeof(evt)); ?


Entre temps j'ai un peu changer mon script, et il y a ceci de rajouté.
J'ai donc testé ce que tu m'as demandé dans ce contexte.

function init(event)
{
try {
alert(typeof(event)); // Renvoie object
// bindForm();
changerSemaine(event); // Un alert(typeof(evt)) dans cette


heu ...

si la variable à tester est 'event' pourquoi tester 'evt' ?


fonction renvoie undefined :-(
} catch(err) {
alert(err.name + " :n" + err.message);
}
}



Jérémie
Le #773899
Heu en fait parce que la function changerSemaine se présente ainsi :

function changerSemaine(evt, typeInf)
{
alert(typeof(evt));
...
}

Je voulais juste pas avoir le même nom dans les différentes définitions de
paramètres; il me semble que ça ne devrait pas poser de problèmes, si ?

"SAM" de news: 47438fb3$0$27397$

que dit alert(typeof(evt)); ?


Entre temps j'ai un peu changer mon script, et il y a ceci de rajouté.
J'ai donc testé ce que tu m'as demandé dans ce contexte.

function init(event)
{
try {
alert(typeof(event)); // Renvoie object
// bindForm();
changerSemaine(event); // Un alert(typeof(evt)) dans cette


heu ...

si la variable à tester est 'event' pourquoi tester 'evt' ?


fonction renvoie undefined :-(
} catch(err) {
alert(err.name + " :n" + err.message);
}
}





Bruno Desthuilliers
Le #773655
Heu en fait parce que la function changerSemaine se présente ainsi :

function changerSemaine(evt, typeInf)
{
alert(typeof(evt));
...
}

Je voulais juste pas avoir le même nom dans les différentes définitions de
paramètres;


???

Jérémie
Le #773654
"Bruno Desthuilliers" écrit dans le message de news: 47441347$0$24310$
Heu en fait parce que la function changerSemaine se présente ainsi :

function changerSemaine(evt, typeInf)
{
alert(typeof(evt));
...
}

Je voulais juste pas avoir le même nom dans les différentes définitions
de paramètres;


???



Ben quoi ?

J'aurais du avoir toutes ces fonctions avec pour premier argument nommé
event ?
Ces trois points d'interrogation me laissent perplexe ...


SAM
Le #773653
Heu en fait parce que la function changerSemaine se présente ainsi :

function changerSemaine(evt, typeInf)
{
alert(typeof(evt));
...
}


et donc ? ça renvoie 'undefined' ?
Ce qui, peut-être, devrait être un peu normal avec IE si evt est un event ?

Je voulais juste pas avoir le même nom dans les différentes définitions de
paramètres; il me semble que ça ne devrait pas poser de problèmes, si ?


si par 'paramètre' tu entends 'argument' c'est à dire le nom de la
variable entre les ( ) dans
function truc(x, y, z)
Si, bien sûr, ces x y z sont exploités tels que tt au long de la
fonction truc.

Heu ... pendant qu'on y est ... event n'est-il pas un objet du JS ?
et bien sûr complètement interprété différemment par IE et les autres
brouteurs.

--
sm

Publicité
Poster une réponse
Anonyme