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 :

Remplir un champ input à partir d'un champ select en jquery


Sujet :

jQuery

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Remplir un champ input à partir d'un champ select en jquery
    Je voudrais pouvoir remplir la valeur du champs prix une fois sélectionné le champs quantité.
    J'ai un fichier php qui renseigne la base de données et me revois les resultats en json comme suit:
    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
      [{
             id: "1",
             item: "Coca",
             qty: "12",
             price: "250"
         },
         {
             id: "2",
             item: "Orange",
             qty: "20",
             price: "102"
         },
         {
             id: "3",
             item: "pepsi",
             qty: "30",
             price: "250"
         }
     ];
    Mon problème ce que en sélectionnant la quantité de la première ligne, il me met la valeur du prix sur la première ligne correctement, mais en sélectionnant la quantité de la deuxième ligne il me remplace la valeur du prix de la première ligne au lieu de de me remplir directement le prix de la deuxième ligne
    Code html : 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
    <form>
     <table id="fact-tablee" style="margin-top:10px;" cellpadding="0" cellspacing="0">
        <tr>
     
            <th>Item</th>
            <th>Quantity</th>
            <th>Price</th>                                             
        </tr>
     
        <tr class="tr">
            <td><input type="text" name="item[]" value=""></td> 
    		<td><select name="qty[]" class="qty">
    			<option value="12">12</option>
    			<option value="20">20</option>
    			<option value="30">30</option>
    		</select></td>
    		<td><input type="text" name="price[]" value="" class="price"></td>
        </tr> 
    	<tr class="tr">
            <td><input type="text" name="item[]" value=""></td> 
    		<td><select name="qty[]" class="qty">
    			<option value="12">12</option>
    			<option value="20">20</option>
    			<option value="30">30</option>
    		</select></td>
    		<td><input type="text" name="price[]" value="" class="price"></td>
        </tr>
     
      </table>
    </form>

    mon js
    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
    $("form").on('change', '.qty', function(){
     
     	 var qty = $(this).val();
     
     	 $.ajax({
    	 	 	url: data,
    	 	 	data: {'qty':qty},
    	 	 	dataType:'json',
    	 	 	success: function(data){
    	 	 		if(data ==''){	 	 			
    	 	 			$('.price').val(0);
    	 	 		}else{
    					$.each(data, function(index, element){
    						$('.price').val(element.price);
    					});
     
    	 	 	  }
    	 	 	}
    	 	 });
        });
     )};
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour faire cela vous pouvez déjà garder la référence au menu déroulant dans un variable avant l'appel à "ajax"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var menuDeroulant = $(this);
    et ensuite à la place "$(.price)" essayez cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menuDeroulant.parents("tr").first().find(".price")
    cela va chercher la ligne "tr" correspondant au menu déroulant et ensuite chercher l'élément ".price" uniquement dans cette ligne


    pour ne pas dépendre de l'affichage qui est ici un tableau, une autre façon de faire serait de lier le menu déroulant au champ texte avec "data"
    http://api.jquery.com/data/

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Bonjour!
    Merci pour votre réponse, mais cela ne résous pas mon problème. mais il est vraie que je n'ai pas préciser que mon tableau ne se limite pas sur deux champs. c'est un tableau dont le ligne sont générées dynamiquement donc le nombre de champs je ne peux les prédéfinir.
    Merci

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    "cela ne résous pas mon problème" ne nous suffit pas pour vous aider, merci d'indiquer à chaque fois :
    1. le code que vous avez essayé
    2. le résultat que vous obtenez, avec le minimum de débugage des différents variables
    3. le résultat que vous auriez souhaité

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    à aucun endroit tu utilises l'id pour identifier chaque ligne.
    Ce serait judicieux.

    Vite fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	<select name="qty[]" class="qty" data-id="ID-DE-CETTE-LIGNE">
    ...
    	<td><input type="text" name="price[]" value="" class="price" id="price-ID-DE-CETTE-LIGNE"></td>
    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
    	$("form").on('change', '.qty', function()
    	{
     
    		var qty = $(this).val();
    		var id = $(this).data('id');
    		var price = 0;
     
    		$.ajax({
    			url: data,
    			data: {'qty':qty},
    			dataType:'json',
    			success: function(data)
    			{
    				if(data != '')
    				{	 	 			
    					$.each(data, function(index, element)
    					{
    						if( element.id == id )
    						{
    							price = element.price;
    						}
    					});
    				}
    				$('#price-'+id).val(price);
    			}
    		});
    	});
    N.B. J'ai parlé ici de l'id (c'est ce que je ferai avec une base de données), mais ça peut-être les index du json.
    Dernière modification par Invité ; 11/05/2017 à 15h38.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    ce que je ferais lors d'un changement sur un <select> c'est de récupérer la référence à la ligne via un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var refTR = $(this).closest( 'tr' );
    et au retour de la requête je n'aurais qu'a m'occuper de remplir les <input> de cette ligne et ce quelque soit leur nombre.

    Cela sous entend bien sûr que chaque requête ne cible bien qu'une ligne, ce qui ne m’apparaît pas très clairement dans l'énoncé !

Discussions similaires

  1. Remplir zone de texte à partir d'un champ
    Par Brooklyn0 dans le forum VBA Access
    Réponses: 14
    Dernier message: 25/04/2017, 13h08
  2. remplir une listbox a partir d'un champ d'une requete mysql
    Par xalam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/04/2010, 18h39
  3. Remplir une liste déroulante à partir d'un champ dans une pop up
    Par wiam26 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/08/2006, 16h42
  4. Réponses: 6
    Dernier message: 29/05/2006, 19h43
  5. Réponses: 14
    Dernier message: 17/05/2006, 17h16

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