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

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

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

5 réponses

1 2 3
Avatar
Laurent vilday
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 !

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)

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

--
laurent


Avatar
ASM
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 :-)

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!



Avatar
ASM
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 ?

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


Avatar
YD
<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.

1 2 3