Aide - Recherche - Membres - Calendrier
Version complète : un simple document.write récalcitrant :D
Forum Développeur - Administration serveur, programmation et base de données > Programmation > Javascript et AJAX
Ethinil
Bonjour tout le monde!

Alors voilà, j'ai un form, dedans une petite liste déroulante, et en fonction du chiffre choisi, j'aimerais afficher des champs supplémentaires (oui ça veut dire que si le javascript est désactivé mon form devient nul mais bon, ça c'est un autre débat)...
Je vous montre le code, et ensuite je vous pose mon problème:

PHP


<html>
<head>
<title>
didju de javascript
</title>
</head>
<body>

<form id="monForm" name="monForm" action="form_validation" method="post">
<fieldset>
<legend>Participants</legend>
<p>
<label for="form_nombre">* Nombre de personnes : </label>
<select id="form_nombre" name="nombre_personne" onChange="java script:submitChange(this);">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</p>

<p>
<table border="0">
<tr><td>Nom :</td><td>Prénom :</td></tr>

&lt;script type="text/javascript">
function submitChange ( liste ){
//Recup de la valeur courante :
var val = liste.options[liste.selectedIndex].value;
//alert(val);
var ligne = new Array();
//Le nombre de fois:
for (var i=0; i<val; i++)
{
// Ce qu'on veut afficher:
ligne[i]= '<tr><td><input type="text" name="firstname" /></td><td><input type="text" name="lastname" /></td></tr>';
document.write(ligne[i]);
}
}
</script>
</table>
</p>
</fieldset>
</form>

</body>
</html>


Je joins également le fichier.

Mon problème c'est que le document.write heuuu... casse tout :s au lieu de s'écrire proprement l'un à la suite de l'autre.
Je sais pas trop comment expliquer autrement... testez le sinon icon_neutral.gif

ps: j'ai testé aussi avec un div, une ID et un innerHTML mais le prob c'est qu'il "remplace" au lieu d'ajouter :s
Ethinil
Sorry pour le double post, mais apparemment:

Si entre ces balises, c'est une fonction qui inclue un 'document.write()' qui est appelée, la page est totalement remplacée par ce qui est écrit via JavaScript.

C'est ça mon problème... :s

Et je ne peux pas sortir mon document.write() de ma function vu que le nombre de champs changent à chaque "onChange" de l'utilisateur sur la liste.
(d'ailleurs je suis en train de me dire que s'il fait 4, puis qu'il change d'avis et qu'il choisit 2, ca va me faire 6 document.write() ... (donc je vais devoir retourner vers une solution avec le innerHTML mais bon...)

Comment faire un document.write() dans une function :'( ?

Est-ce que ce ne serait pas mieux d'oublier le javascript et de partir vers une solution axée php?
Ethinil
Heuuu... désolé pour le triple post, mais voilà, c'est résolu:

PHP


&lt;script type="text/javascript">
function submitChange ( liste ){
var val = liste.options[liste.selectedIndex].value;
var texte = '<table border="0">';
texte += '<tr><td>Nom :</td><td>Pr&eacute;nom :</td></tr>';
//Le nombre de fois:
for (var i=0; i<val; i++)
{
// Ce qu'on veut afficher:
texte += '<tr><td><input type="text" name="firstname" /></td><td><input type="text" name="lastname" /></td></tr>';
//Et on affiche ça dans tel id:
document.getElementById('nomprenom').innerHTML = texte;
}
texte += '</table>';
}
</script>


En tout cas, merci beaucoup pour votre aide icon_biggrin.gif
A une prochaine fois wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.