11548 sujets

JavaScript, DOM et API Web HTML5

Pages :
Rebonjour à tous Smiley smile

Mon problème:

J'apelle une méthode avec un onclick, et le nom de la fonction doit obligatoirement être attribué dynamiquement, ce qui donne sur FF:


newLine.setAttribute('onClick',type+"org.sel(this.id)");

/*le nom de la fonction peut être, dans ce cas, soit:
a) menuorg.sel(this.id)
b) sousmenuorg.sel(this.id)
c) catégoriesorg.sel(this.id)
d) et d'autres... */


et qui fonctionne très bien.
Malheureusement, sur IE, une instruction du type:


newLine.onclick = function(){type+"org.sel"(this.id);}

// pas plus que//

newLine.onclick = type+"org.sel(this.id)";

// ou tout ce qu'on veut dans le genre... //


ne fonctionne. Par contre, évidemment, la fonction apellée avec son nom " en dur", par exemple:


newLine.onclick = function(){menuorg.sel(this.id);}


fonctionne très bien...

Après avoir retourné le problème dans tous les sens ( avec eval(), sans eval(), etc, etc... ), je n'ai pas réussi à donner dynamiquement un nom à une fonction apellée dans un onclick. J'ai dû donc me résoudre à faire instruction crade telle que:


var newLineIE = "<div id="+type+(numDivs.length+1)+" onclick="+type+"org.sel(this.id)>"+newEntry+"</div>";
bloc.innerHTML = bloc.innerHTML+newLineIE;


qui fonctionne, certes, mais qui ne me satisfait pas vraiment... Smiley fache

Ma question:

Est-il impossible sur IE d'attribuer le nom d'une fonction dynamiquement, ou alors est-ce que je me suis lourdement planté quelque part?? Smiley ohwell
Modifié par ami (07 Dec 2006 - 16:33)
et en y accédant par le DOM ? as tu essayé ? j'ai pas le temps tout de suite d'essayer mais je pense qu'un truc du style

newLine.attributes.onclick.value="menuorg.sel(this.id);"


devrait fonctionner... mais je suis loin d'être sûr...
Jeff-com a écrit :
et en y accédant par le DOM ? as tu essayé ? j'ai pas le temps tout de suite d'essayer mais je pense qu'un truc du style

newLine.attributes.onclick.value="menuorg.sel(this.id);"


devrait fonctionner... mais je suis loin d'être sûr...


je vais essayer ça!
Taratatata...

Qu'est-ce que c'est que tout ce binz ?

Je crois comprendre que le seul parametre qui t'importe pour ta fonction c'est l'id de l'élément ayant créé l'événement.

Auquel cas, il n'y a strictement aucun problème ni sous ff ni sous ie à déclarer un truc du genre :

tonélémentsourcedelévénement.onclick=mafonctiondetraitement;

Puis tu écris normalement ta

function mafonctiondetraitement(){

Dans laquelle il n'y a aucun problème pour utiliser this qui fait bien référence à l'élément ayant déclenché l'événement.
Salut,

A mon avis, comme le dit aCOSwt, il faudrait revoir le fonctionnement de ton script.

Néanmoins, ceci devrait marcher :
newLine.onclick = function() {
   eval(type + "org").sel(this.id);
};

Modifié par Eldebaran (06 Dec 2006 - 15:34)
Bigre!

J'avais mal englobé dans les parenthèses de eval() !!
Quel naze!!

Maintenant ça fonctionne! Smiley biggrin

MERCI!

"A mon avis, comme le dit aCOSwt, il faudrait revoir le fonctionnement de ton script."

Pourquoi? La méthode utilisé n'est pas conseillée? Pourtant, ça fonctionne bien... Smiley confused
ami a écrit :
Pourquoi? La méthode utilisé n'est pas conseillée? Pourtant, ça fonctionne bien... Smiley confused
Difficile de juger sans voir le reste de ton code, mais en général l'utilisation d'eval cache une erreur de conception.

Si le sujet est résolu, peux-tu s'il te plait l'indiquer en éditant ton sujet, comme indiqué dans les règles du forum ?
Eldebaran a écrit :
Difficile de juger sans voir le reste de ton code, mais en général l'utilisation d'eval cache une erreur de conception.


Ah ok! C'est bon à savoir!! Smiley biggrin

Eldebaran a écrit :

Si le sujet est résolu, peux-tu s'il te plait l'indiquer en éditant ton sujet, comme indiqué dans les règles du forum ?


Sûr! Pas de problème! Smiley smile
Juste un dernière remarque!

Effectivement: il y avait un problème dans mon raisonnement!!!

il suffit que je repasse la méthode dans une variable:


var prout = this.sel;
newLine.onclick = function() {
	prout(this.id);
}


et hop, tout fonctionne!

ça m'a même pas effleuré avant!!! Quel idiot!! Smiley confused

Merci à tous!!!
A titre d'information, il existe une solution sans avoir recours à eval.

En utilisant la syntaxe suivante :
objet.onclick = new Function('', " /* code */ ");
QuentinC a écrit :
A titre d'information, il existe une solution sans avoir recours à eval.

En utilisant la syntaxe suivante :
objet.onclick = new Function('', " /* code */ ");
Cette syntaxe est en fait équivalente à l'utilisation d'eval.
En fait, non, ça ne fonctionne pas!
Comprend pas...
Obligé de revenir à ma toute première solution du innerHTML Smiley fache
ami a écrit :
En fait, non, ça ne fonctionne pas!
Comprend pas...
Obligé de revenir à ma toute première solution du innerHTML Smiley fache
Est-ce que tu peux être plus précis sur ce qui ne marche pas ?
Et moi, je ne comprends toujours pas ce que je n'arrive pas à comprendre :

Pourquoi chercher plus compliqué que ce qui est le plus simple ET qui fonctionne sous IE et sous FF :

objet.onclick=mafonction;

puis

function mafonction(){
... code dans lequel on peut utiliser this sans l'avoir passé en paramètre.
aCOSwt a écrit :
Pourquoi chercher plus compliqué que ce qui est le plus simple ET qui fonctionne sous IE et sous FF :

objet.onclick=mafonction;

puis

function mafonction(){
... code dans lequel on peut utiliser this sans l'avoir passé en paramètre.
A priori, c'est bien ce qui est fait ici :
var toto = this.sel;
newLine.onclick = function() {
	toto(this.id);
}
this n'est pas "passé en paramètre".
En fait, crois que c'est toute la conception de mon truc qui est foireuse. Je voulais faire un truc simple et vite fait, et finalement...


L'url de ce bronx:
http://aso.no-ip.com/sites/tests/admin_javascript/admin1.php

Tout le code est actuellement dans la page et tout ce qui se trouve dans <div class="blocCadre" >...</div> est créé par une fonction php.

le malaise se trouve dans la méthode //__METHODE AJOUTER ELEMENT__// à la ligne 126.

Le code est encore très crade mais je crois vous allez tout de suite mieux comprendre. Ce qui me les brise menu, mais alors vraiment menu, c'est que c'est juste ce foutu onclick sur IE qui fout tout en l'air, sinon ça fonctionne!

Smiley fache Smiley fache
ami a écrit :

Le code est encore très crade...


Vous avez dit bullshit factory ?

Moi je trouve tout cela très... cohérent...
Modifié par aCOSwt (07 Dec 2006 - 10:22)
aCOSwt a écrit :


Vous avez dit bullshit factory ?

Moi je trouve tout cela très... cohérent...


Heuu, je dois prendre ça comment? Smiley lol
Pages :