IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

serialize sur input et select avec attr name identiques


Sujet :

jQuery

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 66
    Points : 43
    Points
    43
    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

  2. #2
    Membre du Club

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
     
    		}

  3. #3
    Membre du Club

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Voici a quoi mon problème se résumé désormais, ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var name = $(this).find('input').attr('name')
    => collection
    faudrait faire un each dessus ?.

  5. #5
    Membre du Club

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Chaque cellule contiens un seul input ou select.

  6. #6
    Membre du Club

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Si quelqu'un rencontre un problème similaire voici la syntaxe que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Select avec deux champs identiques
    Par avigeilpro dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/11/2009, 04h20
  2. ecrire dans un input type select avec jquery
    Par stomerfull dans le forum jQuery
    Réponses: 1
    Dernier message: 29/09/2009, 18h23
  3. INSERT à partir d'un SELECT avec champ SERIAL
    Par bruno.wiesen dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/03/2007, 11h07
  4. [ODBC] Probleme sur un SELECTED de SELECT avec PHP
    Par G.D.O dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 27/03/2006, 15h44
  5. [DOM] Probleme de selection sur un radio généré avec le dom
    Par Oreily dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/01/2006, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo