Rechercher : dans
Par :

[Javascript] Pb: DOM et IE (ajout d'elements)

Dernière réponse le 18 déc 2008 à 11:16:18 knoodrake, le 11 jun 2007 à 13:41:42 
 Signaler ce message aux modérateurs

Bonjour.

Petit ( mais important) probleme avec JavaScript et.. (surprise) .. IE !

Description:
J'ai un tableau, dans lequel je veu rajouter dynamiquement une nouvelle ligne lorsqu'un certain lien est cliqué.
La nouvelle ligne comprend 2 "<input type='text'>" ayant un id différent a chaque ligne.
La chose marche très bien avec Firefox, mais pas internet Explorer.
Ce dernier m'indique lorsque je clique sur le chti bouton "erreur sur la page" qu'il y a une "erreur de syntaxe". Helas, impossible de retrouver la-dite erreur puisqu'il ne m'indique ou c'est sans tenir compte des inclusions etc..
Je rajoute que la console JavaScript de FFx ne m'indique rien, même pas un warning.

Le HTML:

<table id='table_2' style='display:none;'>
<tr><td>Nom</td><td>Valeur</td></tr>
<tr>
	<td colspan='2' align='center'><a href='#' onclick='one_more_ligne();'>[+] Une de plus</a></td>
</tr>
<tr>
	<td><input type='text' id='oo_nom_1' name='oo_nom'/></td>
	<td><input type='text' id='oo_valeur_1' name='oo_valeur'/></td>
</tr>
</table>
<button onclick='add_opt();' id='submit' disabled>Rajouter</button>


et le JavaScript: ( qui rajoute donc un nouveau TR avec dedans 2 TD comprenant chaquun un input, comme les 2 de départ (cf. le 6 et 7emes lignes du HTML ci-dessu ))
var count = 1;
function one_more_ligne () {
	count++;
	var tr = document.createElement("TR");
	var td_1 = document.createElement("TD");
	var td_2 = document.createElement("TD");
	var inp1 = document.createElement("INPUT");
	var inp2 = document.createElement("INPUT");

	inp1.name="oo_nom";	inp2.name="oo_valeur";
	inp1.type="text";	inp2.type="text";
	inp1.id="oo_nom_"+count;
	inp2.id="oo_valeur_"+count;

	td_1.appendChild(inp1);	td_2.appendChild(inp2);
	tr.appendChild(td_1); 	tr.appendChild(td_2);

	byId("table_2").appendChild(tr);
}

Ah oui, et je précise avant qu'on ne me fasse la remarque pour rien que ById est bien définie quelque part plus tôt dans le fichier js.
PS: ça ne pourrait pas venir d'une erreur autre par dans la page qui bloquerai la suite par hazard ?

Si vous avez des idées, des solutions, des voies d'exploration, n'importe quoi .. :-)

Merci par avance.
Cordialement, Damien.
Configuration: Linux
Firefox 2.0.0.4

Meilleures réponses pour « [Javascript] Pb: DOM et IE (ajout d'elements) » dans :
Javascript - Connaître la hauteur d'un élément HTML VoirSi vous souhaitez connaître la hauteur (height) d'un bloc HTML en javascript, il existe deux façons selon les navigateurs : element.offsetHeight element.style.pixelHeight Ainsi, le code suivant permet d'obtenir la hauteur d'un bloc HTML...
Javascript - Modifier la hauteur (height) d'un élément HTML VoirPour modifier la hauteur d'un élément HTML en javascript, il suffit d'utiliser sa propriété de style "height". Pour cela vous pouvez y faire référence de la manière suivante : Si vous souhaitez connaître la hauteur (height) d'un bloc HTML, il...
Javascript - Introduction au langage Javascript VoirQu'est-ce que le Javascript? Le Javascript est un langage de script incorporé dans un document HTML. Historiquement il s'agit même du premier langage de script pour le Web. Ce langage est un langage de programmation qui permet d'apporter des...
Javascript: les méthodes associées aux objets VoirQu'appelle-t-on une méthode? Une méthode est une fonction associée à un objet, c'est-à-dire une action que l'on peut faire exécuter à un objet. Les méthodes des objets du navigateur sont des fonctions définies à l'avance par les normes HTML, on ne...
Javascript - L'objet navigator VoirLes particularités de l'objet navigator L'objet navigator est un objet qui permet de récupérer des informations sur le navigateur qu'utilise le visiteur. Cela paraît totalement inutile à première vue, toutefois, comme vous le savez sûrement, il...

1

HackTrack, le 20 jun 2007 à 12:34:05
  • +1

Salut!

Ajoute la balise <TBODY> dans ta table et le problème sera résolu.

Voir le code ci-dessous:

<html>
	<head>
		<script language="javascript" type="text/javascript">
			var count = 1;
			
			function one_more_ligne () {
				count++;
				var tr = document.createElement("TR");
				var td_1 = document.createElement("TD");
				var td_2 = document.createElement("TD");
				var inp1 = document.createElement("INPUT");
				var inp2 = document.createElement("INPUT");

				inp1.name="oo_nom";	inp2.name="oo_valeur";
				inp1.type="text";	inp2.type="text";
				inp1.id="oo_nom_"+count;
				inp2.id="oo_valeur_"+count;

				td_1.appendChild(inp1);
				td_2.appendChild(inp2);
				tr.appendChild(td_1);
				tr.appendChild(td_2);
				byId("table_2").getElementsByTagName('tbody')[0].appendChild(tr);
			}

			function byId(elmId){
				var elm = document.getElementById(elmId);
				if(elm==null)
					elm = document.getElementsByName(elmId)[0];
				alert(elm.innerHTML);
				return elm;
			}
		</script>
	</head>
	
	<body>
		<table id="table_2" name="table_2">
			<tbody>
				<tr>
					<td>Nom</td>
					<td>Valeur</td></tr>
				<tr>
					<td colspan="2" align="center"><a href="#" onclick="one_more_ligne();">[+] Une de plus</a></td>
				</tr>
				<tr>
					<td><input type="text" id="oo_nom_1" name="oo_nom"/></td>
					<td><input type="text" id="oo_valeur_1" name="oo_valeur"/></td>
				</tr>
			</tbody>
		</table>
		<button onclick="add_opt();" id="submit" disabled>Rajouter</button>
	</body>
</html>


;-)
HackTrack

Répondre à HackTrack

2

knoodrake, le 6 jui 2007 à 20:26:18

Je vais essayer ça merci beaucoup :)

Edit: Si seulement ça avait pu marcher.. :-(

Répondre à knoodrake

8

 arsonik, le 18 déc 2008 à 11:16:18

Un grand merci tu m'as aussi sauvé des heures de recherche :)

Répondre à arsonik

3

altemis, le 9 jui 2007 à 12:14:53
  • +1

Il faut pour que ca marche sous IE que tu mette l' ID dans le TR

<table style='display:none;'>
<tr id='table_2' ><td>Nom</td><td>Valeur</td></tr>
<tr>

ca marche sous IE mais plus sous FF , a toi d adapter maintenant le code afin d avoir un ID différent pour Table et pour TR et d'appeller le bon pour IE et FF

++

Répondre à altemis

4

altemis, le 9 jui 2007 à 13:42:28
  • +2

Autrement, ca marche dans les deux navigateur si tu place l'id dans un <tbody> ;
cordialement,

Répondre à altemis

5

knoodrake, le 9 jui 2007 à 21:51:36
  • +1

Merci beaucoup altemis.

Répondre à knoodrake

6

entrope, le 17 avr 2008 à 22:05:56
  • +1

Merci pour le <tbody>, ca vient de me sauver la vie :)

Cheers

Répondre à entrope

7

fodjio, le 3 mai 2008 à 16:57:35
  • +2

Merci mille fois pour l'astuce du Tbody !

Je me suis bien arraché les cheveux sur ce problème ^^

Non mais vraiment QUELLE DAUBE cet IE !!!

À croire que Microsoft fait tout pour pourrir la vie des webmasters !

Répondre à fodjio