Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 16/03/2010, 15h05   #1
Membre habitué
 
Inscription : avril 2007
Messages : 491
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 491
Points : 115
Points : 115
Par défaut évènement onclick dynamique

Bonjour, je créé grâce à Dom des noeuds(Examens) dynamiquement et ça marche mais lorsque j'attribue à ces noeuds un évènement onclick mon code ne marche plus. Voici le code de création
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
for(var i=0;i<nbExam;i++)
	 {
 
		// création des nouveaux noeuds
		var nouveauLi = document.createElement('li');
		var nouveauDiv = document.createElement('div');
		var nouveauLabel = document.createTextNode("Examen "+(i+1));
 
		 // lui donne un attribut class appelé cliquable défini dans le css  
		 nouveauDiv.setAttribute("className", "cliquable");//pour IE
		 nouveauDiv.setAttribute("class", "cliquable"); //pour ff
		 /*Il n'est pas nécessaire d'ajouter une détection du navigateur ci dessus, le 
		 code non compris par chacun des navigateurs ne générant pas d'erreur.*/
 
		 //sur clic des div créés appel de la fonction de création des séries
		 nouveauDiv.onclick = series('4');//ie
		 nouveauDiv.setAttribute("onclick","javascript:series(4);");//ff
 
        // raccord des noeuds
		nouveauDiv.appendChild(nouveauLabel);
		nouveauLi.appendChild(nouveauDiv);
		var insertAvantMoi=document.getElementById('series');
		var parentUl=insertAvantMoi.parentNode;
		parentUl.insertBefore(nouveauLi, insertAvantMoi);
 
 
 
 
 
	 }
  }
le bout de code incriminé c'est celui qui est censé déclenché un autre évènement lors du clic sur les div précédemment créés, le voici
Code :
1
2
3
 //sur clic des div créés appel de la fonction de création des séries
		 nouveauDiv.onclick = series('4');//ie
		 nouveauDiv.setAttribute("onclick","javascript:series(4);");//ff
En effet cette appel déclenche une erreur qui ne me permet même plus de créer les examens. La fonctions séries quand à elle est chargé lors du clic sur les examens d'effacer les series qu'ils y'avaient avant et d'en recréer de nouvelles. Voici sont code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function series(nbSeries)
  {
		var noeud = document.getElementById('menu');
 
		// j'efface les ancien noeud fils dont className=="ulnoeud"
		 for(var i=0;i<noeud.childNodes.length;i++)
		 {
 
		     if((noeud.childNodes[i]).getAttribute("className")=="ulnoeud")//ie
			 {
				noeud.removeChild(noeud.childNodes[i]);
			 }
			 else
			 {
			    if((noeud.childNodes[i]).getAttribute("class")=="ulnoeud")//ff
				{
					noeud.removeChild(noeud.childNodes[i]);
				}
			 }
		 }
 
    // recréation des nouvelle séries
		for(var i=0;i<nbSeries;i++)
		{
 
			// création des nouveaux noeuds
			var nouveauLi = document.createElement('li');
			 // lui donne un attribut class appelé cliquable défini dans le css  
			 nouveauLi.setAttribute("className", "ulnoeud");//pour IE
			 nouveauDiv.setAttribute("class", "ulnoeud"); //pour ff
			 /*Il n'est pas nécessaire d'ajouter une détection du navigateur ci dessus, le 
			 code non compris par chacun des navigateurs ne générant pas d'erreur.*/
 
			var nouveauDiv = document.createElement('div');
			var nouveauLabel = document.createTextNode("Series "+(i+1));
 
			// raccord des noeuds
			nouveauDiv.appendChild(nouveauLabel);
			nouveauLi.appendChild(nouveauDiv);
			var insertAvantMoi=document.getElementById('images');
			var parentUl=insertAvantMoi.parentNode;
			parentUl.insertBefore(nouveauLi, insertAvantMoi);
 
 
		}
  }
Comment donc créer dynamiquement mon onclick
Merci
sebac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 16h04   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 12 879
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 12 879
Points : 30 131
Points : 30 131
Je comprends pas trop pourquoi tu te compliques la vie en essayant de dissocier IE et FF

Code :
1
2
nouveauDiv.className = "cliquable");
nouveauDiv.onclick = function(){series(4);}
devrait être largement suffisant.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 16h34   #3
Membre habitué
 
Inscription : avril 2007
Messages : 491
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 491
Points : 115
Points : 115
merci mais j'avais déjà résolu le problème grâce à la même solution que la tienne
Code :
nouveauDiv.onclick = function(){series(4);}
mais seulement j'ai un autre problème ma fonction series est bien exécutée et me crée des series: series1 à 4 sauf que la première partie du code qui est chargé d'effacer les series existante dans la fonction series(nbSeries) ne fonctionne pas, la voici
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var noeud = document.getElementById('menu');
		alert("nb noeud "+noeud.childNodes.length);
		// j'efface les ancien noeud fils dont className=="ulnoeud"
		 for(var i=0;i<noeud.childNodes.length;i++)
		 {
 
		     if((noeud.childNodes[i]).getAttribute("className")=="ulnoeud")//ie
			 {
				noeud.removeChild(noeud.childNodes[i]);
			 }
			 else
			 {
			    if((noeud.childNodes[i]).getAttribute("class")=="ulnoeud")//ff
				{
					noeud.removeChild(noeud.childNodes[i]);
				}
			 }
		 }
si je clic sur le div chargé d'appeler la fonction series il va me créer de nouvelles series à chaque fois sans effacer les précédente donc au lieu de me retrouver avec 4 series je me retrouve avec 4*nbclic series. Je rajoute des noeuds mais
Code :
alert("nb noeud "+noeud.childNodes.length);
me donne constamment le même nombre de noeud ça me paraît bizarre.
sebac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 12h00   #4
Membre habitué
 
Inscription : avril 2007
Messages : 491
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 491
Points : 115
Points : 115
j'ai pu résoudre mon problème en fait la partie du code chargée de me créer des noeuds fils le faisait bien mais le problème c'est que je cherchait à les effacer à partir du mauvais noeud père.
Merci
sebac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h09.


 
 
 
 
Partenaires

Hébergement Web