11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous, je souhaite récupérer les valeurs d'un formulaire pour les transmettre à un tableau multidimensionnel mais en retour je n'ai rien et une erreur "Uncaught TypeError: Cannot set property '0' of undefined" ou Uncaught TypeError: Cannot read property 'length' of undefined.

Comment je pourrrais faire pour y remédier s'il vous plait ?



var tab_presta = new Array();

$("#button").click(function(){

for (var i = 0; i < document.forms["form1"].length; i++) 
{

  tab_presta[0][i] = document.forms["form1"].elements[i].value ;
  document.write(  tab_presta[0][i] +"<br>" ); 

  }
})
 
Modérateur
Bonjour,

1) juste après la 1re ligne, il faudrait ajouter
tab_presta[0] = [];

En effet, tab_presta est un tableau de tableaux. L'instruction ci-dessus permet d'indiquer que l'élément 0 de tab_presta est lui aussi un tableau.

2) y-a-t-il bien dans le html un élément <form> avec pour id "form1" (<form id="form1">) ?

3) pour la boucle, ce n'est pas document.forms["form1"].length, mais document.forms["form1"].elements.length

Amicalement,
Merci grandement pour votre attention. Par ailleurs malgré les modificaton le problème persiste j'obtiens le message suivant et aucune valeur affiché : "Uncaught TypeError: Cannot read property 'elements' of undefined"

Voici le code javascript :

 
var tab_presta = new Array();
tab_presta[0] = [];
var longeur_tab = document.forms["form1"].elements.length;

$("#push").click(function(){

for (var i = 0; i < longeur_tab ; i++) 
{
  //tab_presta[i] = new Array(20);
  tab_presta[0][i] = document.forms["form1"].elements[i].value ;
  document.write(  tab_presta[0][i] +"<br>" ); 

  }
})



Voici le code HTML :


<form id="form1" name="form1">
<label for="input">Input</label>
<input type="text" id="name" name="name">
<br><br>
<label for="input1">Input1</label>
<input type="text" id="name1" name="name1">
<br><br>
<label for="textarea">textarea</label>
<textarea id="story" name="story"
          rows="5" cols="33">

</textarea>
<br><br>
<label for="textarea1">textarea1</label>
<textarea id="story1" name="story1"
          rows="5" cols="33">

</textarea>
<br><br>
<label for="pets">select</label>
<select name="pets" id="pet-select">
    <option value="">--Please choose an option--</option>
    <option value="dog">Dog</option>
    <option value="cat">Cat</option>
    <option value="hamster">Hamster</option>
    <option value="parrot">Parrot</option>
    <option value="spider">Spider</option>
    <option value="goldfish">Goldfish</option>
</select>
<br><br>
<label for="pets2">select</label>
<select name="pets2" id="pet-select2">
    <option value="">--Please choose an option--</option>
    <option value="dog">Dog</option>
    <option value="cat">Cat</option>
    <option value="hamster">Hamster</option>
    <option value="parrot">Parrot</option>
    <option value="spider">Spider</option>
    <option value="goldfish">Goldfish</option>
</select>

<button type="button" id="push">push</button>

</form>



Comment puis je faire s'il vous plait ?
Modérateur
Bonjour,

Il ne faut pas employer document.write() une fois que la page est chargée (et il vaut mieux même ne pas l'employer du tout).

À part ça, ton code marchait.

Voici une manière d'afficher les valeurs des éléments en fin de page qui devrait mieux fonctionner. Il est aussi possible d'afficher ces valeurs dans la console en utilisant la fonction console.log().
var debug;
debug=document.createElement("div");
debug.id="debug";
document.body.appendChild(debug);
var tab_presta = new Array();
tab_presta[0] = [];
var longeur_tab = document.forms["form1"].elements.length;
$("#push").click(function(){
	debug.innerHTML = "";
	for (let i = 0; i < longeur_tab ; i++) 
	{
		let e = document.forms["form1"].elements[i];
		tab_presta[0][i] = e.value;
		if(e.name)
			debug.innerHTML += e.name+": "+tab_presta[0][i]+"<br>";
	}
});

Amicalement,
Bonsoir sacapuss et parsimonih, je pensais avoir envoyer une réponse de remerciement depuis tout ce temps mais apparemment c'est pas le cas. Donc grand merci à vous le problème a été résolu par parsimonih, ça fonctionne très bien, merci.