Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comment déclencher artificiellement la fonction affecté à onclick ?

266 views
Skip to first unread message

Jean Ceugniet

unread,
Sep 1, 2007, 6:21:29 AM9/1/07
to
Salut,

Voilà, j'ai la fonction javascript suivante :

> function partieJoueurOut (joueur_id, lien)
> {
> lien.parentNode.style.display = "none";
> x_maj_stats (joueur_id, $idPartie, majFinie);
> }

et le code php suivant :

> <li><a href="#" onclick="partieJoueurOut($joueur_id, this);">$nom est OUT</a></li>

(Les variables $ sont des variables php, le code est généré en php).
Sur une certaine condition, je souhaite pouvoir déclencher
artificiellement la fonction affectée au onclick d'un certain lien; je
peux sans problème repérer le lien en question dans la page (c'est le
seul dont le display ne soit pas encore à none), et je voudrais pouvoir
déclencher la fonction affectée à son évènement onclick.
Comme faire pour obtenir l'équivalent d'un "execute (this.onclick);" ?

Merci

Mickaël Wolff

unread,
Sep 1, 2007, 6:55:43 AM9/1/07
to
Jean Ceugniet a écrit :

> Comme faire pour obtenir l'équivalent d'un "execute (this.onclick);" ?

cible.onclick() ;

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

ASM

unread,
Sep 1, 2007, 6:58:48 AM9/1/07
to
En réponse à Jean Ceugniet qui écrivit, en date du : 1/09/07 12:21, le
message suivant :

il suffit donc de lancer cette fonction, non ?

this.onclick();

> Merci

toujours chercher au plus simple :-)

var truc = document.getElementsByTagName('A');
for(var i=0; i<truc.length; i++)
if(truc[i].style.display!=='none') {
truc[i].onclick();
return false;
}

ou

var truc = document.links;
for(var i=0; i<truc.length; i++)
if(truc[i].href && truc[i].style && truc[i].style.display!=='none') {
truc[i].onclick();
return false;
}

autre exemple :

<form onsubmit="return false;">
<button name="visu" onclick="alert('vu');">voir</button>
<button onclick="visu.click();">cliquer bouton [voir]</button>
</form>
<p><a href="#" onclick="document.forms[0].visu.click();">Cliquer le
bouton [voir]</a>

La fonction JavaScript : element.click();
ne fonctionnerait que pour des boutons de formulaires


à +

Jean Ceugniet

unread,
Sep 1, 2007, 4:23:31 PM9/1/07
to
Ah ben oui. Je concevais onclick comme un évènement auquel on affectait
une méthode, pas comme une méthode lui-même.

Merci à tous :D

ASM

unread,
Sep 1, 2007, 10:02:53 PM9/1/07
to
En réponse à Jean Ceugniet qui écrivit, en date du : 1/09/07 22:23, le
message suivant :

> Ah ben oui. Je concevais onclick comme un évènement auquel on affectait
> une méthode, pas comme une méthode lui-même.

Je ne sais si c'est tout à fait ça ... ?

essaie :
alert(truc.onclick);

on voit qu'on récupère la fonction contenue dans le onclick de truc

par l'adjonction de () à cette récup on en lance l'appel.

.

Cenekemoi

unread,
Sep 3, 2007, 3:35:57 AM9/3/07
to
Bonjour à Jean Ceugniet <jean.c...@gmail.com> qui nous a écrit :

Méfie-toi juste de ton code dit php avec ta variable $joueur_id car le
généré Html sera du type :

<a href="#" onclick="partieJoueurOut(12345, this);">TOTO est OUT</a>

Tout va bien si $joueur_id est numérique, mais attention s'il peut être
*alpha*. Il faut alors coder en php :

<a href="#" onclick="partieJoueurOut('$joueur_id', this);">$nom est
OUT</a>

(voir les apostrophes autour de $joueur_id)

--
Cordialement, Thierry ;-)

Jean Ceugniet

unread,
Sep 3, 2007, 6:14:14 PM9/3/07
to
Cenekemoi a écrit :

Il est numérique :D (mais j'y penserai pour un prochain truc ;) merci)

Bruno Desthuilliers

unread,
Sep 4, 2007, 7:19:22 AM9/4/07
to
Mickaël Wolff a écrit :

> Jean Ceugniet a écrit :
>
>> Comme faire pour obtenir l'équivalent d'un "execute (this.onclick);" ?
>
> cible.onclick() ;
>

A ce propos, sous IE7, j'ai une bonne blague avec ça (en combi avec un
setTimeout): ça m'iconifie la fenêtre !

j'ai pas encore eu le temps de revenir sur le pb pour essayer de
l'isoler proprement, mais si qqu'un a déjà vu ça et qu'il a trouvé le
joint, l'info m'intéresse...

TIA

ASM

unread,
Sep 4, 2007, 7:36:50 AM9/4/07
to
En réponse à Bruno Desthuilliers qui écrivit, en date du : 4/09/07
13:19, le message suivant :

>>
>> cible.onclick() ;
>>
>
> A ce propos, sous IE7, j'ai une bonne blague avec ça (en combi avec un
> setTimeout): ça m'iconifie la fenêtre !

kess que ça veut dire "iconifier" ?

Bruno Desthuilliers

unread,
Sep 4, 2007, 8:43:04 AM9/4/07
to
ASM a écrit :
la fenêtre disparait (sans que l'appli soit fermée), et une icone de
l'appli apparait dans la barre des taches...

Olivier Miakinen

unread,
Sep 4, 2007, 11:03:34 AM9/4/07
to
Le 04/09/2007 14:43, Bruno Desthuilliers a écrit :
>>
>> kess que ça veut dire "iconifier" ?
>>
> la fenêtre disparait (sans que l'appli soit fermée), et une icone de
> l'appli apparait dans la barre des taches...

La version de Windows en français que j'utilise appelle ça « réduire ».
Et dans un fichier de configuration sous AIX c'est « minimize ».

ASM

unread,
Sep 4, 2007, 12:21:00 PM9/4/07
to
En réponse à Olivier Miakinen qui écrivit, en date du : 4/09/07 17:03,
le message suivant :

Et moi j'appelle ça "replier" (en barre des tâches).

ASM

unread,
Sep 4, 2007, 12:23:00 PM9/4/07
to
En réponse à Bruno Desthuilliers qui écrivit, en date du : 4/09/07
14:43, le message suivant :
> ASM a écrit :

>>
>> kess que ça veut dire "iconifier" ?
>>
> la fenêtre disparait (sans que l'appli soit fermée), et une icone de
> l'appli apparait dans la barre des taches...


Ha oui ! Rigolo comme comportement :-)

Ces IE ne nous épargnent vraiment aucune facétie !

ASM

unread,
Sep 4, 2007, 12:27:22 PM9/4/07
to
En réponse à Olivier Miakinen qui écrivit, en date du : 4/09/07 17:03,
le message suivant :
> Le 04/09/2007 14:43, Bruno Desthuilliers a écrit :
>>> kess que ça veut dire "iconifier" ?
>>>
>> la fenêtre disparait (sans que l'appli soit fermée), et une icone de
>> l'appli apparait dans la barre des taches...
>
> La version de Windows en français que j'utilise appelle ça « réduire ».

et comment appellent-ils ce que ça fait quand on clique le bouton (du
milieu) de réduction de la fenêtre ?

> Et dans un fichier de configuration sous AIX c'est « minimize ».

Je continue à préférer "replier" ;-)
bien que "minimise" me semble pas mal malgrè qu'on puisse minimiser la
fenêtre sans pour autant la replier.

Olivier Miakinen

unread,
Sep 4, 2007, 12:51:31 PM9/4/07
to
Le 04/09/2007 18:27, ASM a écrit :
>>
>> La version de Windows en français que j'utilise appelle ça « réduire ».
>
> et comment appellent-ils ce que ça fait quand on clique le bouton (du
> milieu) de réduction de la fenêtre ?

Le bouton du milieu s'appelle « agrandir » puisque mes fenêtres ne sont
jamais en plein écran. Une fois agrandi (j'aurais dit « maximisé »), le
bouton devient « niveau inférieur » pour revenir à l'état normal.

>> Et dans un fichier de configuration sous AIX c'est « minimize ».
>
> Je continue à préférer "replier" ;-)
> bien que "minimise" me semble pas mal malgrè qu'on puisse minimiser la
> fenêtre sans pour autant la replier.

Sur AIX, quand la fenêtre est à l'état « window » et que je « minimize »
elle passe à l'état « icon » (c'est vraiment une icone, et pas un bouton
dans une hypothétique barre des tâches, laquelle n'existe pas). Quand la
fenêtre est à l'état « icon » alors je « normalize » pour la ramener à
l'état « window ». Je n'ai pas le truc dans mon fichier de config, mais
je parie que passer la fenêtre en plein écran s'appellerait « maximize ».

Bruno Desthuilliers

unread,
Sep 3, 2007, 10:32:13 AM9/3/07
to
Olivier Miakinen a écrit :

Merci Olivier !-)

Bruno Desthuilliers

unread,
Sep 3, 2007, 10:50:11 AM9/3/07
to
ASM a écrit :

N'est-ce pas ?-)

Bon, accessoirement, j'ai (partiellement) résolu le problème, en partie
grâce à un autre de tes posts dans ce thread qui m'a rappelé l'existence
de la fonction click(). Qui - dois-je le préciser - fonctionne sous IE
(même pour un lien), mais lève une exception sous mon vieux mozilla...
J'attends de tester ça demain sous une version récente de Firefox, mais
je subodore que là encore, on est dans une portabilité optimale :(

Enfin bref, c'est que du bonheur.

Bruno Desthuilliers

unread,
Sep 5, 2007, 9:23:30 AM9/5/07
to
Bruno Desthuilliers a écrit :

Je confirme.
- sous FF, utiliser:
document.getElementById('mon_lien').onclick();
- sous IE, utiliser:
document.getElementById('mon_lien').click();

<troll cible='ASM'>
Ou alors se simplifier la vie avec jQuery:
$('#mon_lien').click();

!-)
</troll>

Mickaël Wolff

unread,
Sep 5, 2007, 12:04:27 PM9/5/07
to
Bruno Desthuilliers a écrit :

> Je confirme.
> - sous FF, utiliser:
> document.getElementById('mon_lien').onclick();
> - sous IE, utiliser:
> document.getElementById('mon_lien').click();

Ce qui est amusant, c'est que seul HTMLInputElement.click() est prévu
par la recommandation du W3C
<http://www.w3.org/TR/DOM-Level-2-HTML/html.html>

Je comprends mieux cette incohérence entre les navigateurs !

Bruno Desthuilliers

unread,
Sep 4, 2007, 5:39:46 AM9/4/07
to
Mickaël Wolff a écrit :

> Bruno Desthuilliers a écrit :
>
>
>>Je confirme.
>>- sous FF, utiliser:
>> document.getElementById('mon_lien').onclick();
>>- sous IE, utiliser:
>> document.getElementById('mon_lien').click();
>
>
> Ce qui est amusant, c'est que seul HTMLInputElement.click() est prévu
> par la recommandation du W3C
> <http://www.w3.org/TR/DOM-Level-2-HTML/html.html>
>
> Je comprends mieux cette incohérence entre les navigateurs !

Ce qui est le plus amusant AMHA (et continue à m'échapper...), c'est la
réaction de IE sur l'utilisation de element.onclick(). Si c'est
systématiquement reproductible, il y a de quoi faire un petit script
très énervant pour les utilisateurs de cette bouse infâme^Mmerveille de
la technologie moderne !-)

Laurent vilday

unread,
Sep 5, 2007, 5:50:42 PM9/5/07
to
Mickaël Wolff a écrit :

> Ce qui est amusant, c'est que seul HTMLInputElement.click() est prévu
> par la recommandation du W3C
> <http://www.w3.org/TR/DOM-Level-2-HTML/html.html>
>
> Je comprends mieux cette incohérence entre les navigateurs !

<div id="lolo"></div>

<form><input type="text"></form>

<script type="text/javascript">
window.onload = function()
{
var E = document.getElementById('lolo');
alert('1) ' + typeof E.onclick + '/' + typeof E.click);

E = document.forms[0].elements[0];
alert('2) ' + typeof E.onclick + '/' + typeof E.click);
};
</script>


FX2 :
1) undefined/undefined
2) undefined/function

IE7 :
1) object/object
2) object/object

Op9 :
1) object/undefined
2) object/function

La RFC stipule, je cite : - Method click: Simulate a mouse-click. For
*INPUT* elements whose type attribute has one of the following values:
"button", "checkbox", "radio", "reset", or "submit". -

Ce qui en français : Simule un clic de souris. Pour les éléments *INPUT*
dont l'attribut type à une des valeurs suivantes : "button", "checkbox",
"radio", "reset" ou "submit"

Donc seul FX2 et Op9 implémentent (sur les 3 misérables tests que j'ai
fait) correctement cette partie de la RFC et si j'ai tout compris lol ce
qui n'est pas gagné. Je ne m'attendais guère à mieux de la part du IE -
eh oui, on ne parle plus /de/ IE mais /du/ IE, ce wild animal :)

Par contre d'ou provient le onclick pour Opéra, je ne sais pas.
Tentative d'émulation du comportement IE probablement.

M'enfin tout cela ne m'inspire comme souvent que ceci : sniff sniff :(

--
laurent

Message has been deleted

Laurent vilday

unread,
Sep 5, 2007, 6:02:36 PM9/5/07
to
Oups, nouvelle édition rectifiant un précédent post annulé. Mais on sait
tous à quel point les annulations sont hummm disons aléatoires. Prière
d'ignorer le précédent qui raconte un paquet de bêtises :) shut !

Mickaël Wolff a écrit :


> Bruno Desthuilliers a écrit :
>> Je confirme.
>> - sous FF, utiliser:
>> document.getElementById('mon_lien').onclick();
>> - sous IE, utiliser:
>> document.getElementById('mon_lien').click();
>
> Ce qui est amusant, c'est que seul HTMLInputElement.click() est prévu
> par la recommandation du W3C
> <http://www.w3.org/TR/DOM-Level-2-HTML/html.html>

<div id="lolo"></div>

<form>
<input type="text">
<input type="button">
</form>

<script type="text/javascript">
window.onload = function()
{
var E = document.getElementById('lolo');
alert('1) ' + typeof E.onclick + '/' + typeof E.click);

E = document.forms[0].elements[0];
alert('2) ' + typeof E.onclick + '/' + typeof E.click);

E = document.forms[0].elements[1];
alert('3) ' + typeof E.onclick + '/' + typeof E.click);
};
</script>


FX2 :
1) undefined/undefined // OUI / OUI
2) undefined/function // OUI / non
3) undefined/function // OUI / OUI

IE7 :
1) object/object // non / non
2) object/object // non / non
3) object/object // non / non

Op9 :
1) object/undefined // non / OUI
2) object/function // non / non
3) object/function // non / OUI

D'ou provient le onclick pour Opéra, je ne sais pas. Je suppose une
autre tentative d'émulation du comportement du IE.

La RFC stipule, je cite : - Method click: Simulate a mouse-click. For
*INPUT* elements whose type attribute has one of the following values:
"button", "checkbox", "radio", "reset", or "submit". -

Ce qui en français : Simule un clic de souris. Pour les éléments *INPUT*
dont l'attribut type à une des valeurs suivantes : "button", "checkbox",
"radio", "reset" ou "submit"

Donc IE a tort tout le temps, jusque là rien de bien étonnant.

FX2 et Opéra9 ont raison - sur cette partie de la RFC - pour le test 1
(le div) et pour le test 3 (input button) et tous les deux se plantent
pour le test 2 (input type) parce que à ce jour "text" ne fait pas
partie de la liste énumérée (button, checkbox, radio, reset et submit)

ASM

unread,
Sep 6, 2007, 7:48:40 AM9/6/07
to
En réponse à Laurent vilday qui écrivit, en date du : 6/09/07 0:02, le
message suivant :

> Oups, nouvelle édition rectifiant un précédent post annulé. Mais on sait
> tous à quel point les annulations sont hummm disons aléatoires. Prière
> d'ignorer le précédent qui raconte un paquet de bêtises :) shut !

Tommache ! y m'plaisait bien :-)

> Mickaël Wolff a écrit :
>> Bruno Desthuilliers a écrit :
>>> Je confirme.
>>> - sous FF, utiliser:
>>> document.getElementById('mon_lien').onclick();
>>> - sous IE, utiliser:
>>> document.getElementById('mon_lien').click();
>>
>> Ce qui est amusant, c'est que seul HTMLInputElement.click() est prévu
>> par la recommandation du W3C
>> <http://www.w3.org/TR/DOM-Level-2-HTML/html.html>
>
> <div id="lolo"></div>
>
> <form>
> <input type="text">
> <input type="button">

<textarea></textarea>

> </form>
>
> <script type="text/javascript">
> window.onload = function()
> {
> var E = document.getElementById('lolo');
> alert('1) ' + typeof E.onclick + '/' + typeof E.click);
>
> E = document.forms[0].elements[0];
> alert('2) ' + typeof E.onclick + '/' + typeof E.click);
>
> E = document.forms[0].elements[1];
> alert('3) ' + typeof E.onclick + '/' + typeof E.click);

E = document.forms[0].elements[2];
alert('4) ' + typeof E.onclick + '/' + typeof E.click);

> };
> </script>
>
>
> FX2 :
> 1) undefined/undefined // OUI / OUI
> 2) undefined/function // OUI / non
> 3) undefined/function // OUI / OUI

4) undefined/undefined

> IE7 :
> 1) object/object // non / non
> 2) object/object // non / non
> 3) object/object // non / non

IE-Mac :
1) 2) 3) 4) object/function

iCab3.0.3
1) 2) 3) 4) undefined/function

Safari2
1) object/undefined
2) undefined/function
3) undefined/function
4) object/undefined

> Op9 :
> 1) object/undefined // non / OUI
> 2) object/function // non / non
> 3) object/function // non / OUI

Op9-Mac
1) undefined/undefined
2) undefined/function
3) undefined/function
4) undefined/undefined

NC4.5 :
... ? ...

Et maintenant ? avec tous ces cas ... keféton ?

> D'ou provient le onclick pour Opéra, je ne sais pas. Je suppose une
> autre tentative d'émulation du comportement du IE.
>
> La RFC stipule, je cite : - Method click: Simulate a mouse-click. For
> *INPUT* elements whose type attribute has one of the following values:
> "button", "checkbox", "radio", "reset", or "submit". -

Oui, bon, les brouteurs simplifient peut-être par form.elements ?
bien que pour certains ... et le textarea ?

> M'enfin tout cela ne m'inspire comme souvent que ceci : sniff sniff :(

ou bouhaaa! bouhaaa!

ASM

unread,
Sep 6, 2007, 8:06:25 AM9/6/07
to
En réponse à Bruno Desthuilliers qui écrivit, en date du : 4/09/07
11:39, le message suivant :

>
> Ce qui est le plus amusant AMHA (et continue à m'échapper...), c'est la
> réaction de IE sur l'utilisation de element.onclick(). Si c'est
> systématiquement reproductible, il y a de quoi faire un petit script
> très énervant pour les utilisateurs de cette bouse infâme^Mmerveille de
> la technologie moderne !-)

J'ai fini par me mettre un émulateur Win XP, mais je n'y ai que IE6
Il ne semble rien replier avec bidule.onclick()

Il m'est impossible chez M$ de télécharger IE7 depuis mon Mac
(sont vraiment c....t chez M$ !)
on peut le télécharger ailleurs ?

Bruno Desthuilliers

unread,
Sep 6, 2007, 9:06:05 AM9/6/07
to
ASM a écrit :

> En réponse à Bruno Desthuilliers qui écrivit, en date du : 4/09/07
> 11:39, le message suivant :
>>
>> Ce qui est le plus amusant AMHA (et continue à m'échapper...), c'est
>> la réaction de IE sur l'utilisation de element.onclick(). Si c'est
>> systématiquement reproductible, il y a de quoi faire un petit script
>> très énervant pour les utilisateurs de cette bouse infâme^Mmerveille
>> de la technologie moderne !-)
>
> J'ai fini par me mettre un émulateur Win XP, mais je n'y ai que IE6
> Il ne semble rien replier avec bidule.onclick()

Effectivement, après "réduction" du code a minima, je n'arrive pas à
reproduire le problème. Je subodore une interaction vaseuse avec d'autre
code dans la page d'origine. Je n'ai pas le temps d'exploer plus pour le
moment, mais j'y reviendrai à l'occasion. A suivre...


> Il m'est impossible chez M$ de télécharger IE7 depuis mon Mac

Ah bin oui, forcément.

> (sont vraiment c....t chez M$ !)

Non ??? Pas vrai ???

YD

unread,
Sep 6, 2007, 4:08:39 PM9/6/07
to
Laurent vilday a écrit :
> <div id="lolo"></div> [...]

Quelques modifications dans l'exemple proposé, ajouter un
attribut onclick à chaque élément, donne des infos
intéressantes. Le comportement de Fx est conforme aux specs :
visiblement le click est ajouté à tous les INPUT mais
désactivés sur text, etc. Ce qui est conforme à la
référence DOM 2 ou la méthode void click(); figure dans la
définition de l'interface HTMLInputElement (Appendix B:
IDL Definitions) -- pas de distinction selon l'attribut
type.

--- Exemple modifié ---

<p><div id="lolo" onclick="test(this);">DIV Object</div>
<form>
<p><input type="text" value="input type=text" onclick="test(this);">
<p><input type="button" value="Button" onclick="test(this);"></button>
</form>

<script type="text/javascript">
window.onload = function()
{
var E = document.getElementById('lolo');

alert('1) div: ' + typeof E.onclick + '/' + typeof E.click);
try{E.click();} catch(e){};

E = document.forms[0].elements[0];

alert('2) input text: ' + typeof E.onclick + '/' + typeof E.click);
try{E.click();} catch(e){};

E = document.forms[0].elements[1];

alert('3) input button: ' + typeof E.onclick + '/' + typeof E.click);
try{E.click();} catch(e){};
};

function test(o){
o.style.color="#994477";
}
</script>

> La RFC stipule, je cite : - Method click: Simulate a mouse-click. For
> *INPUT* elements whose type attribute has one of the following values:
> "button", "checkbox", "radio", "reset", or "submit". -
>

> Donc IE a tort tout le temps, jusque là rien de bien étonnant.

Mais une implémentation peut aller au-delà des spécifications ! Bon, elle
doit supporter l'ensemble de la norme, ce qui n'est pas le cas d'IE, mais
rien n'empêche d'ajouter des comportements comme click là où ce n'est pas
explicitement prévu...

Ceci dit, le problème évoqué par Bruno Desthuilliers (sur la réduction
dans la barre des tâches) a certainement à voir avec l'utilisation de
l'évènement par son script -- récupéré avec e.target ou event.srcElement.
Quand il est déclenché par click ou onclick la cible n'est pas forcément
l'objet qu'on attendrait... et idem pour this.

--
Y.D.

0 new messages