2010-04-26 5 views
0

J'espérais garder la compatibilité cross-browser et c'est le seul problème à ce jour.Impossible d'obtenir la syntaxe correcte pour dynam. créer onclick la manière ie

.setAttribute("onclick", "return showRapidText("+itemnum+");"); 

Cela fonctionne parfait, mais je voudrais rendre IE compatible en le plaçant dans cette syntaxe

.onclick = new Function("fnDisplay_Computers('" + alines[i] + "')"); 

donc ... J'ai essayé

.onclick = new Function("showRapidText('" + itemnum + "')"); 

et

.onclick = new Function("return showRapidText('" + itemnum + "')"); 

et environ 40 autres façons mais rien RKS

+0

Merci pour vos réponses et votre droite que j'essayais de faire cela en boucle afin que la première réponse ne fonctionne pas pour mon problème. Ce que j'ai fini par faire qui fonctionne comme un charme est ceci. xxx.setAttribute ("itemnum", itemnum); xxx.onclick = function() {return showRapidText (this.getAttribute ("itemnum")); } Cette réponse a été fournie par un membre très sympathique et brillant des codingforums sous le nom de Old Pendant. – Max

Répondre

3
element.onclick = function() { 
    return showRapidText(itemnum); 
}; 
1

+1 réponse J-P: les littéraux de fonction sont plus massivement que les chaînes. Pirater du code dans des cordes est une horreur que vous devriez éviter à tout prix. En outre, setAttribute ne devrait presque jamais être utilisé dans un HTMLDocument en raison de la compatibilité IE (et parce que les propriétés HTML DOM niveau 1 sont plus lisibles de toute façon).

Un piège potentiel cependant: si vous faites cela dans une boucle, ce qui semble être le cas, vous n'obtiendrez pas le comportement souhaité, en raison du closure loop problem. Vous pouvez résoudre cela avec une autre fermeture:

for (var i= 0; i<alines.length; i++) { 
    elements[i].onclick= function(i) { 
     return function() { 
      fnDisplay_Computers(alines[i]); 
     }; 
    }(i); 
} 

ou plus proprement en utilisant la cinquième édition ECMAScript disposent Function#bind:

for (var i= 0; i<alines.length; i++) { 
    elements[i].onclick= fnDisplay_Computers.bind(null, alines[i]); 
} 

Adding Function#bind aux navigateurs qui ne supportent pas encore.

Questions connexes