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
> Comme faire pour obtenir l'équivalent d'un "execute (this.onclick);" ?
cible.onclick() ;
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
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
à +
Merci à tous :D
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.
.
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 ;-)
Il est numérique :D (mais j'y penserai pour un prochain truc ;) merci)
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
kess que ça veut dire "iconifier" ?
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 ».
Et moi j'appelle ça "replier" (en barre des tâches).
Ha oui ! Rigolo comme comportement :-)
Ces IE ne nous épargnent vraiment aucune facétie !
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.
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 ».
Merci Olivier !-)
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.
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>
> 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 !-)
<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
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)
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!
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 ?
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 ???
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.