Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ 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 24/02/2011, 15h34   #1
Futur Membre du Club
 
Nicolas Bonnici
Inscription : janvier 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Nicolas Bonnici

Informations forums :
Inscription : janvier 2011
Messages : 59
Points : 19
Points : 19
Par défaut serialize sur input et select avec attr name identiques

Bonjour à tous,

J'ai construit un tableau pour enregistrer des déclinaisons de produits dans une solution de gestion de stock.

Ce tableau est dynamique, on peut rajouter des lignes (pour une nouvelle déclinaison) et des colonne pour un nouveau type d'attribut.

J'utilise la méthode jQuery (1.5) serialize() pour le parser et l'envoyer via XHR vers un script PHP coté serveur.

Mon problème est le suivant, lorsque la méthode sérialize parse tout les inputs et select de mon tableau il ignore purement et simplement tout ceux qui comporte le même attribut 'name' même si je leur met un attr 'id' différent.

Quelqu'un aurait t'il une solution à mon problème?

Merci,

Nico
nico78200 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 15h51   #2
Futur Membre du Club
 
Nicolas Bonnici
Inscription : janvier 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Nicolas Bonnici

Informations forums :
Inscription : janvier 2011
Messages : 59
Points : 19
Points : 19
Si je parse mon tableau sans serialize(), mais en créant un array via push(), j'obtiens un array d'objets. Es ce normal ou je le construis mal? voici le résultat dans ma console:




Et ici le code source:

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
 
		addNewProducts: function() {
 
			var attrs = [];
 
			$('td').each(function() {
				if ( $(this).hasClass('selectCol') ) {
					var name = $(this).find('select').attr('name');
					var val = $(this).find('select option:selected').val();
					attrs.push({
						'name' : name,
						'val' : val
					});	
				} else {
					var name = $(this).find('input').attr('name');
					var val = $(this).find('input').val();
					attrs.push({
						'name': name,
						'val' : val
					});					
				}
			});
 
			console.log(attrs);
 
		}
nico78200 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h34   #3
Futur Membre du Club
 
Nicolas Bonnici
Inscription : janvier 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Nicolas Bonnici

Informations forums :
Inscription : janvier 2011
Messages : 59
Points : 19
Points : 19
Voici a quoi mon problème se résumé désormais, ma fonction:

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
 
		addNewProducts: function() {
 
			var attrs = [];
 
			$('table#listAttr td').each(function() {
				if ( $(this).hasClass('selectCol') ) {
					var name = $(this).find('select').attr('name');
					var val = $(this).find('select option:selected').val();
					attrs.push({
						'name' : name,
						'val' : val
					});	
				} else {
					var name = $(this).find('input').attr('name');
					var val = $(this).find('input').val();
					attrs.push({
						'name': name,
						'val' : val
					});					
				}
			});
 
			var test = $.param(attrs);
 
			console.log(test);
 
		}
Me retourne en console:

Code :
1
2
 
Taille=undefined&Coloris=undefined&poids=undefined&paht=undefined&pvht=undefined&qte=undefined&Taille=undefined&Coloris=undefined&poids=undefined&paht=undefined&pvht=undefined&qte=undefined
Pourquoi val est 'undefined' alors que dans l'objet que je lui passe en paramètre à param() il es correctement renseigné?
nico78200 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h52   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Code :
var name = $(this).find('input').attr('name')
=> collection
faudrait faire un each dessus ?.
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h54   #5
Futur Membre du Club
 
Nicolas Bonnici
Inscription : janvier 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Nicolas Bonnici

Informations forums :
Inscription : janvier 2011
Messages : 59
Points : 19
Points : 19
Chaque cellule contiens un seul input ou select.
nico78200 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 17h55   #6
Futur Membre du Club
 
Nicolas Bonnici
Inscription : janvier 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Nicolas Bonnici

Informations forums :
Inscription : janvier 2011
Messages : 59
Points : 19
Points : 19
Si quelqu'un rencontre un problème similaire voici la syntaxe que j'ai utilisé:

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
 
		addNewProducts: function() {
 
			var attrs = [];
 
			$('table#listAttr td').each(function() {
 
				if ( $(this).hasClass('selectCol') ) {
					var name = $(this).find('select').attr('name');
					var val = $(this).find('select option:selected').val();
					attrs.push({
						'name' : name,
						'val' : val
					});	
				} else {
					var name = $(this).find('input').attr('name');
					var val = $(this).find('input').val();
					attrs.push({
						'name' : name,
						'val' : val
					});	
				}
 
				//console.log('name: '+name+' val: '+val);
			});
 
			$.each(attrs, function(index,value) {
				console.log(value['name']+' :'+value['val']);
			});
 
		}
Ce n'est pas la meilleure loin de là, mais ça fonctionne.

Nico
nico78200 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 +2. Il est actuellement 16h39.


 
 
 
 
Partenaires

Hébergement Web