1

Bonjour tout le monde

J'ai envie de faire un formulaire pour envoyer plusieurs données sur un serveur, plus précisément, des dates te types d'événements pour un calendrier. Je suis en train de bosser sur le formulaire, et je souhaite pouvoir ajouter autant d'événements que possible en une fois. Seulement, pour ne pas surcharger la page, j'aimerais que l'utilisateur puisse faire apparaître les champs relatifs à un nouvel événement à enregistrer en cliquant sur un bouton. Le problème est que quand j'ajoute ces champs au DOM, les valeurs entrées dans les champs existants sont effacées… et ce n'est pas le but, évidemment. Quelqu'un aurait une idée de comment faire pour éviter ce problème ?
Je précise que je ne souhaite pas utiliser de librairie externe genre scriptaculous, jQuery, dojo ou autres mootools (du moment que ces librairies le font, on peut le faire en JS basique grin)

Merci d'avance
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

2

Quel code utilises-tu pour ajouter des nouveaux champs au formulaire ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Normalement la manipulation du DOM ne perd aucune information. Il suffit de t'y prendre proprement avec des removeChild() et appendChild() là où il faut.
Et si jamais tu as des valeurs à sauvegarder tu peux bien entendu les sauvegarder dans une variable javascript…
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

4

tripaf je faisais une relecture du DOM, le copiais, y ajoutais les champs et remplaçais tout le html déjà présent... Je suppose qu'appeler "appendChild" autant de fois qu'il me le faut pour chaque champ jouerait ? J'aimerais ajouter deux labels, deux inputs et un <br />. appendChild pour chaque truc, et c'est réglé, c'est ça ?

• Ymox va se pendre
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

5

Remplacer le html c'est pas une manipulation du DOM. tongue
En plus c'est mal, et même interdit en XHTML.
Donc ouais, la méthode propre c'est d'apeller appendChild pour chaque élément, et ça donne un truc dans ce genre: [source=js]
var group1 = document.createElement('div'); // Crée un conteneur (pas obligatoire, c'est un exemple tongue)
// Crée des éléments vierges (il faudrait normalement leur ajouter des attributs)
var label1 = document.createElement('label');
var label2 = document.createElement('label');
var input1 = document.createElement('input');
var br1 = document.createElement('br');

group1.appendChild(label1);
group1.appendChild(label2);
group1.appendChild(input1);
group1.appendChild(br1);

var parentElement = document.getElementById('parent'); // L'endroit où insérer les éléments.

parentElement.appendChild(group1); // Ajoute les éléments.
parentElement.removeChild(group1); // Supprime les éléments.
parentElement.appendChild(group1); // Ajoute de nouveau les éléments.[/source](D'où l'intérêt d'avoir un framework comme jQuery sous la main)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes