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 :

Ajout d'un produit dans un tableau


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2018
    Messages : 31
    Par défaut Ajout d'un produit dans un tableau
    Bonjour,

    J'ai besoin d'aide en Javascript.

    Je dispose d'un tableau comprenant un produit, un prix et une quantité restante.

    En dessous de mon tableau, j'ai un bouton "Ajouter un produit".
    Ce bouton ouvre une fenêtre pop-up avec les 3 champs "produit", "prix" et "quantité restante".

    On doit saisir les 3 champs et cliquer sur le bouton "valider"

    Et voilà mon problème, lorsque je clique le bouton "valider", rien ne se passe. Cela ne m'ajoute pas à mon tableau.

    Pourtant :
    Dans le formulaire HTML, j'ai bien mit dans mon form un onsubmit="AddProduct(nom, prix, quantite)"
    Et, dans le javascript, j'ai une fonction pour ajouter au tableau et je récupère bien mes valeurs des champs. Alors, je ne comprends pas trop. Je suis vraiment bloqué.
    Et, j'aurais besoin de votre aide s'il vous plait.

    Voici mon code HTML :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <!doctype html>
    <html lang="en">
    	<head>
    		<meta charset="utf-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1">
    		<script src="pear2pear.js"></script>
    		<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    		<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    		<script>
                              $( function() {
                                    $( "#dialog" ).dialog({
                                            autoOpen: false,  height: 400,width: 350,modal: true,
                                    });
                                    $( "#opener" ).on( "click", function() {
                                            $( "#dialog" ).dialog( "open" );
                                    });
                                    $('#dialog').keyup(function() {
                                            var $intitule = $('.intitule');
                                            var $prix = $('.prix');
                                            var $quantite = $('.quantite');
                                            if (!$intitule.val() || !$prix.val() || !$quantite.val()) {
                                                    $('.submit').attr('disabled', true);
                                            }
                                             else {
                                                    $('.submit').attr('disabled', false);
                                            }
                                    }
                                    ).keyup();
                                      
                            }
                             );
                    </script>
    	</head>
    	<body onload="onLoad()">
    		<table id="MaterialTableId">
    			<caption>
    				Materiel
    			</caption>
    			<thead>
    				<tr>
    					<th>
    						Intitulé
    					</th>
    					<th>
    						Prix Unitaire
    					</th>
    					<th>
    						Quantité Restante
    					</th>
    				</tr>
    			</thead>
    			<tbody id ="MaterialTableContentId"></tbody>
    		</table>
    		<div id="dialog">
    			<form onsubmit="AddProduct(nom, prix, quantite)">
    				<p>
    					Intitulé : 
    					<input id="intitule" class="intitule" type="text" />
    				</p>
    				<p>
    					Prix : 
    					<input id="prix" class="prix" type="text" />
    				</p>
    				<p>
    					Quantité restante : 
    					<input id="quantite" class="quantite" type="text" />
    				</p>
    				<input type="submit" class="submit" value="Valider" />
    				<input type="submit" value="Annuler" />
    			</form>
    		</div>
    		<button id="opener">Ajouter un produit</button>
    	</body>
    </html>

    Et mon code Javascript :

    Code javascript : 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
    32
    33
    34
    35
    36
    37
    38
    var ProductTab = []
    var nom = document.getElementById("intitule");
    var prix = document.getElementById("prix");
    var quantite = document.getElementById("quantite");
     
    function onLoad() {
    	debugger;
     
    	ProductTab.push({name : "Processeur", price : 199.9, quantity : 15});
    	ProductTab.push({name : "EcranLCD", price : 99.9, quantity : 3});
    	ProductTab.push({name : "Carte mère", price : 338.14, quantity : 5});
    	ProductTab.push({name : "Adaptateur VGA-HDMI", price : 7.99, quantity : 2});
    	ProductTab.push({name : "Carte graphique", price : 449.99, quantity : 4});
     
    	AddProduct("Souris", 7.80, 10);
     
        FillMaterialTable();
    }
     
    function FillMaterialTable() {
    	debugger;
     
    	var htmlContent = " ";
     
    	for(var i = 0; i < ProductTab.length; i++)
    	{
            htmlContent += "<tr><td>" + ProductTab[i].name + "</td><td>" + ProductTab[i].price + "</td><td>" + ProductTab[i].quantity + "</td></tr>";
    	}
     
    	$("#MaterialTableContentId").html(htmlContent);
        $("#MaterialTableContentId").show();
     
    }
     
    function AddProduct(nom, prix, quantite){
    	debugger;
    	ProductTab.push({name : nom, price : prix, quantity : quantite});
    }

    Merci beaucoup et bonne année 2019 !

    Si vous avez des questions et c'est pas très clair, n'hésitez pas.

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il y a plusieurs erreurs.

    Un formulaire a normalement une propriété action qui indique la page qui va traiter les données saisies. Mais dans ton cas il n'y en a pas et donc la page qui va être appelée pour traiter les données c'est cette page avec pour conséquence un rechargement de ladite page et donc une perte des données saisies.
    Tu utilises onsubmit. Or par défaut cet évènement renvoie true ce qui indiquera à la page qu'elle peut passer les données à la page référencée dans la propriété action mais comme il n'y en a pas (cf. ci-dessus) ça va recharger la page. La solution est que le onsubmit renvoie false pour qu'on reste sur la page et qu'on puisse voir le produit ajouté. De plus tu passes des variables via addProduct. Or nom, prix et quantite ne sont pas des objets HTML et de ce fait ne correspondent à rien. Il faut passer les valeurs qui correspondent aux objets. Par exemple document.getElementById('prix').value à la place de prix. Même chose pour quantite. nom n'existe pas car à la place tu as écrit intitule. Enfin. Tu fais un addProduct mais pas de FillMaterialTable donc la table n'est pas mise à jour.

    Pour que cela fonctionne, il faut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       <form onsubmit="AddProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);FillMaterialTable();return false">
    Comme ça ça fonctionne mais ce n'est pas la chose à faire car ce n'est pas beau. Tu n'as pas besoin d'un formulaire pour faire ce que tu fais au contraire ça amène plus de contraintes qu'autre chose.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <!doctype html>
    <html lang="en">
     <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <script src="pear2pear.js"></script>
      <script src="<a href="https://code.jquery.com/jquery-1.12.4.js"></script" target="_blank">https://code.jquery.com/jquery-1.12.4.js"></script</a>>
      <script src="<a href="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script" target="_blank">https://code.jquery.com/ui/1.12.1/jq...i.js"></script</a>>
    <script>  
    var ProductTab = []
    var nom = document.getElementById("intitule");
    var prix = document.getElementById("prix");
    var quantite = document.getElementById("quantite");
     
    function onLoad() {
     
     ProductTab.push({name : "Processeur", price : 199.9, quantity : 15});
     ProductTab.push({name : "EcranLCD", price : 99.9, quantity : 3});
     ProductTab.push({name : "Carte mère", price : 338.14, quantity : 5});
     ProductTab.push({name : "Adaptateur VGA-HDMI", price : 7.99, quantity : 2});
     ProductTab.push({name : "Carte graphique", price : 449.99, quantity : 4});
     
     AddProduct("Souris", 7.80, 10);
     
        FillMaterialTable();
    }
     
    function FillMaterialTable() {
     
     var htmlContent = " ";
     
     for(var i = 0; i < ProductTab.length; i++)
     {
            htmlContent += "<tr><td>" + ProductTab[i].name + "</td><td>" + ProductTab[i].price + "</td><td>" + ProductTab[i].quantity + "</td></tr>";
     }
     
     $("#MaterialTableContentId").html(htmlContent);
        $("#MaterialTableContentId").show();
     
    }
     
    function AddProduct(nom, prix, quantite){
     ProductTab.push({name : nom, price : prix, quantity : quantite});
    }  
    </script>  
      <script>
                              $( function() {
                                    $( "#dialog" ).dialog({
                                            autoOpen: false,  height: 400,width: 350,modal: true,
                                    });
                                    $( "#opener" ).on( "click", function() {
                                            $( "#dialog" ).dialog( "open" );
                                    });
                                    $('#dialog').keyup(function() {
                                            var $intitule = $('.intitule');
                                            var $prix = $('.prix');
                                            var $quantite = $('.quantite');
                                            if (!$intitule.val() || !$prix.val() || !$quantite.val()) {
                                                    $('.submit').attr('disabled', true);
                                            }
                                             else {
                                                    $('.submit').attr('disabled', false); 
                                            }
                                    }
                                    ).keyup();
                                      
                            }
                             );
                    </script>
     </head>
     <body onload="onLoad()">
      <table id="MaterialTableId">
       <caption>
        Materiel
       </caption>
       <thead>
        <tr>
         <th>
          Intitulé
         </th>
         <th>
          Prix Unitaire
         </th>
         <th>
          Quantité Restante
         </th>
        </tr>
       </thead>
       <tbody id ="MaterialTableContentId"></tbody>
      </table>
      <div id="dialog">
       <form onsubmit="AddProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);FillMaterialTable();return false">
        <p>
         Intitulé : 
         <input id="intitule" class="intitule" type="text" />
        </p>
        <p>
         Prix : 
         <input id="prix" class="prix" type="text" />
        </p>
        <p>
         Quantité restante : 
         <input id="quantite" class="quantite" type="text" />
        </p>
        <input type="submit" class="submit" value="Valider" />
        <input type="submit" value="Annuler" />
       </form>
      </div>
      <button id="opener">Ajouter un produit</button>
     </body>
    </html>
    Images attachées Images attachées  

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2018
    Messages : 31
    Par défaut
    Merci. Effectivement, ça marche très bien.

    Merci

    Par contre, petit problème, lorsque j'actualise ma page, je perds les données ajoutés à mon tableau.
    Est-ce possible de garder les nouvelles données même en actualisant la page ?

    Le code est pas très beau ? Aie :/
    Donc, comment, je pourrais faire pour rendre les choses plus "esthétiques" ?

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Pour sauvegarder les données il faut avoir recours à un langage serveur comme php ou asp afin de les mettre dans une base de données (conseillé) ou dans des fichiers (à défaut d’autre chose et s’il y a très peu de données).

  5. #5
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Si c'est juste une appli web locale, alors tu peux sauvegarder tes données en Local => LocalStorage, ou en les plaçant dans des cookies. tu peux aussi les sauvegarder dans un fichier texte.

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2018
    Messages : 31
    Par défaut
    Bonjour,

    Désolé pour le retard de ma réponse. Merci énormément pour ton aide Badaze, cela fonctionne parfaitement

    C'est noté Psychadelic
    Je vais me renseigner sur le "LocalStorage", je ne connaissais pas.

    Sinon, j'aurai encore besoin d'aide, c'est la dernière fois, promis. Je ne sais pas si je dois créer un nouveau sujet ou pas ?

    Bon, je vais le poster ici, désolé, si je fais une bêtise :/

    Mon but est d'ajouter un nouveau bouton "modifier le stock" dans mon tableau matériel.
    Lorsque, je clique sur le bouton "modifier le stock", je me retrouve avec un formulaire contenant les champs "intitulé", "prix unitaire" et "quantité restante"
    Les champs sont pré-rempli avec les données du tableau.

    Toute cette partie est faite, elle fonctionne parfaitement

    Le but sur lequel je bloque est de changer ses champs, de cliquer sur le bouton "valider" et que cela change immédiatement sur mon tableau.
    Mais, je n'y arrive pas. Je bloque sur ça.
    Je ne sais pas trop quoi mettre. A mon avis, il suffit de rajouter une petite ligne à ma fonction EditClient. J'ai tenté grep de jquery mais, ça ne marche pas :/

    Bon, pour plus de facilité, voici mes codes :

    Le code HTML :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <!doctype html>
    <html lang="en">
    	<head>
    		<meta charset="utf-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1">
    		<script src="pear2pear.js"></script>
    		<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    		<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    		<script>
                              $( function() {
                                    $( "#dialog" ).dialog({
                                            autoOpen: false,  height: 400,width: 350,modal: true,
                                    });
                                    $( "#opener" ).on( "click", function() {
                                            $( "#dialog" ).dialog( "open" );
                                    });
                                    $('#dialog').keyup(function() {
                                            var $intitule = $('.intitule');
                                            var $prix = $('.prix');
                                            var $quantite = $('.quantite');
                                            if (!$intitule.val() || !$prix.val() || !$quantite.val()) {
                                                    $('.submit').attr('disabled', true);
                                            }
                                             else {
                                                    $('.submit').attr('disabled', false);
                                            }
                                    }
                                    ).keyup();
                                                                    $( "#modification" ).dialog({
                                                                            autoOpen: false, height: 250, width: 450, margin:0, padding:0, modal: true,
                                                                    });
                                      
                            }
                             );
                    </script>
    	</head>
    	<body onload="onLoad()">
    		<table id="MaterialTableId">
    			<caption>
    				Materiel
    			</caption>
    			<thead>
    				<tr>
    					<th>
    						Intitulé
    					</th>
    					<th>
    						Prix Unitaire
    					</th>
    					<th>
    						Quantité Restante
    					</th>
    					<th>
    						Modifier le stock
    					</th>
    				</tr>
    			</thead>
    			<tbody id ="MaterialTableContentId"></tbody>
    		</table>
    		<div id="dialog">
    			<form onsubmit="AddProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);FillMaterialTable();return false">
    				<p>
    					Intitulé : 
    					<input id="intitule" class="intitule" type="text" />
    				</p>
    				<p>
    					Prix : 
    					<input id="prix" class="prix" type="text" />
    				</p>
    				<p>
    					Quantité restante : 
    					<input id="quantite" class="quantite" type="text" />
    				</p>
    				<input type="submit" class="submit" value="Valider" />
    				<input type="submit" value="Annuler" />
    			</form>
    		</div>
    		<button id="opener">Ajouter un produit</button>
    		<div id="modification">
     
    			<form>
     
    				<p>
    					Intitulé :
    					<input name="intitule" id="intitule" class="intitule"  type="text" required="required" />
    				</p>
    				<p>
    					Prix unitaire :
    					<input id="prix" class="prix" type="number"  step="any" required="required" />
    				</p>
    				<p>
    					Quantité restante :
    					<input id="quantite" class="quantite" type="number" required="required" />
    				</p>
     
    				<input type="submit" class="submitEdit" value="Valider" />
    				<input type="reset" value="Annuler" />
     
    			</form>
     
    		</div>				
    	</body>
    </html>

    Et, le code Javascript :

    Code Javascript : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    var ProductTab = []
     
    function onLoad() {
    	debugger;
     
    	ProductTab.push({id: 1, name : "Processeur", price : 199.9, quantity : 15});
    	ProductTab.push({id: 2, name : "EcranLCD", price : 99.9, quantity : 3});
    	ProductTab.push({id: 3, name : "Carte mère", price : 338.14, quantity : 5});
    	ProductTab.push({id: 4, name : "Adaptateur VGA-HDMI", price : 7.99, quantity : 2});
    	ProductTab.push({id: 5, name : "Carte graphique", price : 449.99, quantity : 4});
     
        FillMaterialTable();
    }
     
    function FillMaterialTable() {
    	debugger;
     
    	var htmlContent = " ";
     
    	for(var i = 0; i < ProductTab.length; i++)
    	{
            htmlContent += "<tr><td>" + ProductTab[i].name + "</td><td>" + ProductTab[i].price + "</td><td>" + ProductTab[i].quantity + "</td><td>" + "<button onclick=EditClient("+ ProductTab[i].id +")>Modifier le stock</button>" + "</td></tr>";
    	}
     
    	$("#MaterialTableContentId").html(htmlContent);
        $("#MaterialTableContentId").show();
     
    }	
     
    function AddProduct(nom, prix, quantite){
    	debugger;
    	ProductTab.push({name : nom, price : prix, quantity : quantite});
    }
     
    function EditClient(id) {
    	debugger;
     
    	$( "#modification" ).dialog( "open" );	
     
        var current = $.grep(ProductTab, function(item){
    		return item.id == id;
    	});
     
    	$("#modification").find("#quantite").val(current[0].quantity);
    	$("#modification").find("#prix").val(current[0].price);
    	$("#modification").find("#intitule").val(current[0].name);
     
    }

    Si vous avez des questions, n'hésitez pas !

    Merci.

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

Discussions similaires

  1. ajout d'une ligne dans un tableau
    Par gup dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/12/2007, 09h14
  2. Macro pour ajouter un nouvel élément dans un tableau
    Par dudu134 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/02/2007, 16h31
  3. Réponses: 5
    Dernier message: 30/07/2006, 17h49
  4. [Tableaux] Ajout dynamique de ligne dans un tableau
    Par gforce dans le forum Langage
    Réponses: 7
    Dernier message: 14/07/2006, 12h02
  5. Ajout de ligne dynamique dans un tableau (Incompatible IE)
    Par seb34 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 26/05/2006, 11h03

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