Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

25 réponses
Avatar
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

10 réponses

1 2 3
Avatar
Bruno Desthuilliers
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.

Avatar
Jérémie
"Bruno Desthuilliers" a
é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 !


Avatar
SAM

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)); ?

Avatar
Jérémie

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);


Avatar
Jérémie

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);


Avatar
SAM

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);
}
}



Avatar
Jérémie
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" a écrit dans le message
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);
}
}





Avatar
Bruno Desthuilliers
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;


???

Avatar
Jérémie
"Bruno Desthuilliers" a
é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 ...


Avatar
SAM
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 ?
<http://fr.selfhtml.org/javascript/objets/event.htm>
et bien sûr complètement interprété différemment par IE et les autres
brouteurs.

--
sm

1 2 3