11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai un script qui crée dynamiquement un tableau dans lequel pour chaque cellule je copie l'attribut onclick d'un objet de référence (importé d'un fichier XML).

tdNode.onclick = function() {objRef.getAttribute('onclick')};


La ligne ci-dessus ne marche pas puisqu'au lieu d'affecter la valeur de retour de "objRef.getAttribute('onclick')" c'est ce texte qui est affecté.
A la base j'utilisais setAttribute() mais IE ne l'aime pas.

Quelqu'un a t-il une idée de la bonne syntaxe ?

Merci,
Eh bien j'ai une fonction qui met à jour le TBODY d'un tableau à partir de l'objet docXML. docXML est un tableau renvoyé par XmlHttpRequest au format XML.

var allTR = docXML.getElementsByTagName("tr");
content = '';
for (var i=0; i<allTR.length; i++){
	var trNode = document.createElement("tr");
	var divTD = allTR.item(i).getElementsByTagName("td");
	for (var j=0; j<divTD.length; j++){
		var tdNode = document.createElement("td");
		data = '';
		if(divTD.item(j).firstChild && divTD.item(j).firstChild.data) data = divTD.item(j).firstChild.data;
                tdNode.setAttribute('class', divTD.item(j).getAttribute('class'));
                tdNode.onclick = function() {divTD.item(j).getAttribute('onclick')};                
                trNode.appendChild(tdNode);
	}
	divTBODY.appendChild(trNode);

Le truc c'est que pour chaque cellule je dois récupérer un attribut onclick qui contient l'appel à une fonction avec des arguments qui varient pour chaque cellule : tableEditTD(arg1, arg2, arg3).
Et avec la ligne
tdNode.onclick=function(){divTD.item(j).getAttribute('onclick')};

et bien ça ne marche pas. Une fois la mise à jour faite, lorsque je clique sur une cellule, au lieu d'appeler 'tableEditTD(arg1, arg2, arg3)' ça appelle 'divTD.item(j).getAttribute.getAttribute('onclick')'...
Je me doute que c'est juste une histoire de syntaxe mais je ne trouve pas...
Bonjour.

a écrit :
A la base j'utilisais setAttribute() mais IE ne l'aime pas.


Je viens de faire un test avec la recopie simple de l'attribut onclick de la source, et ça ne semble pas poser de problèmes...

tdNode.setAttribute('onclick', divTD.item(j).getAttribute('onclick'));


Par contre, n'arrive pas à faire fonctionner (et je doute que ce soit possible)

tdNode.onclick = ...


Quel est le problème avec IE ?
Salut,

Et bien sous IE il ne se passe rien lorsque je clique sur la cellule.
Pour essayer de comprendre j'ai fait un alert(tdNode.onclick) juste après le setAttribut et sous Firefox j'ai bien :
function onclick(event) {tableEditTD(arg1, arg2, arg3);}

Mais sous IE j'ai :
tableEditTD(arg1, arg2, arg3);


De toutes façons, j'ai lu sur les forums que setAttribute ne marchait pas sous IE pour les évenements. C'est pour ça que je me suis tourné vers
tdNode.onclick = ...

Pourquoi tu doutes que ça puisse fonctionner ?
Modifié par AceG (29 Sep 2006 - 10:59)
Avec ie7, j'affiche bien function onclick(event) {tableEditTD(arg1, arg2, arg3);}

Donc le problème concerne ie6...

Effectivement, je vois mieux comme ça, avec tdNode.onclick = function() {div...

Fonctionne aussi avec Opera...

Avec IE6, reste la solution de générer une chaîne avec javascript et de la coller avec innerHTML dans les tr, ou concaténer avec l'innerHTML de tbody avant réinjection...
J'ai essayé avec innerHTML. J'ai concaténé tous mes td dans une variable que j'affectais à chaque tr mais encore une fois ça marche sous FF mais pas sous IE :
divTBODY.appendChild(trNode);
trNode.innerHTML =  tdConcaténés;

Message d'erreur sous IE -> "erreur d'exécution..."


Salut chme, j'ai également essayé :
tdNode.onclick = function() {divTD.item(j).onclick}; 

Mais je reviens à mon problème de base :
tdNode.onclick=function(){divTD.item(j).getAttribute('onclick')};

Où au lieu d'affecter la fonction que je veux récupérer ça affecte :
divTD.item(j).getAttribute('onclick')

Donc lorsque je clique, divTD et j n'existent plus...