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

  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 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    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.

  7. #7
    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,

    J'ai voulu modifier mon titre pour mettre "modification d'un produit dans un tableau" mais, c'est impossible. On ne peut pas éditer un message ?
    C'est dommage car, je vais devoir faire un double poste :/

    Voici mes modifications concernant ma fonction EditClient :

    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
    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);
     
    	$("#modification").find("#quantite").ProductTab.push(current[0].quantity);
    	$("#modification").find("#prix").ProductTab.push(current[0].quantity);
    	$("#modification").find("#intitule").ProductTab.push(current[0].quantity);
     
    }

    Mais, ça ne marche toujours pas, je suis nul :/
    Je clique sur "modifier le stock", j'ai bien mes valeurs, je les modifie et je clique sur "valider" et rien ne se passe. Je desespère :/

    Pourtant, j'ai essayé de le push dans mon tableau avec ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $("#modification").find("#quantite").ProductTab.push(current[0].quantity);
    $("#modification").find("#prix").ProductTab.push(current[0].quantity);
    $("#modification").find("#intitule").ProductTab.push(current[0].quantity);
    Mais, non, c'est pas ça.

    Bref, merci d'avance pour votre aide. Bon week-end à tous

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Par défaut
    pour tout de dire, je ne comprends pas ton code.

    La premiere chose qui me gène dedans, c'est la présence des balises <form> sur lesquelles il n'y a pas l'attribut action="" ce qui sous entend par défaut un rechargement complet de la page, et qu'il faut le gérer en JS si on veut empêcher cette action.

    Ensuite je déteste (c'est relatif) voir du script JS dans la partie HTML, surtout quand on utillise jQuery, la relecture du code est dispersée et c'est compliqué pour s'y retrouver...

  9. #9
    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
    Je plussoie ce que dit psychadelic.


    Quand on part mal dans la conception c'est dur de rattraper. J'ai fait en sorte de faire fonctionner ton code mais il ne faut pas continuer dans cette voie.

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
     
    <!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");
    var status = null;
    var line   = null;
     
    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 class='line' data-ligne="+i+"><td>" + ProductTab[i].name + "</td><td>" + ProductTab[i].price + "</td><td>" + ProductTab[i].quantity + "</td></tr>";
     }
     
     $("#MaterialTableContentId").html(htmlContent);
        $("#MaterialTableContentId").show();
     
     $( function() {
      $( "tr.line" ).on( "click", function() {
       status = "upd";
       line   = $( this ).data( "ligne" );
       getProduct(line);
       $( "#dialog" ).dialog( "open" );
          $('#dialog').trigger('keyup');      
      });
          }
        );
     
    }
    function manageProduct() {
     if (status == "new") {
      AddProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);
     }
     
     if (status == "upd") {
      updateProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);
     }
     
     FillMaterialTable();
     $( "#dialog" ).dialog( "close" );
     return false;
    }
     
    function AddProduct(nom, prix, quantite){
     ProductTab.push({name : nom, price : prix, quantity : quantite});
    } 
    function updateProduct(nom, prix, quantite){
     ProductTab[line].name     = nom;
     ProductTab[line].price    = prix;
     ProductTab[line].quantity = quantite;
    } 
    function initProduct(ligne) {
     if (ligne == null) {
      document.getElementById("intitule").value  = "";
      document.getElementById("prix").value      = "";
      document.getElementById("quantite").value  = ""; 
     } else {
      getProduct(ligne);
     }
    }
    function getProduct(ligne) {
     document.getElementById("intitule").value  = ProductTab[ligne].name;
     document.getElementById("prix").value      = ProductTab[ligne].price;
     document.getElementById("quantite").value  = ProductTab[ligne].quantity;
    }
    </script>  
    <script>
      $( function() {
             $( "#dialog" ).dialog({
                     autoOpen: false,  height: 400,width: 350,modal: true,
             });
            
             $( "#opener" ).on( "click", function() {
              status = "new";
        line   = null;
        initProduct(null);
                    $( "#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();
       
             $( "#cancel" ).on( "click", function() {
       initProduct(line);
       $('#dialog').trigger('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="return manageProduct()">
        <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="button" id="cancel" value="Annuler" />
       </form>
      </div>
      <button id="opener">Ajouter un produit</button>
     </body>
    </html>

  10. #10
    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,

    Merci pour vos conseils. J'ai essayé de faire mon code de manière plus propre :

    Voici ma page 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
    104
    105
    106
    107
    <!doctype html>
    <html lang="en">
    	<head>
     
    		<meta charset="utf-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1">
     
    		<!-- Mon CSS -->
    		<link href="pear2pear.css" rel="stylesheet" type="text/css"> 
     
    		<!-- CSS du Jquery -->
    		<link href="jquery-ui-1.12.1.custom/jquery-ui.structure.css" rel="stylesheet" type="text/css">
    		<link href="jquery-ui-1.12.1.custom/jquery-ui.structure.min.css" rel="stylesheet" type="text/css">
    		<link href="jquery-ui-1.12.1.custom/jquery-ui.theme.css" rel="stylesheet" type="text/css">
    		<link href="jquery-ui-1.12.1.custom/jquery-ui.theme.min.css" rel="stylesheet" type="text/css">
    		<link href="jquery-ui-1.12.1.custom/jquery-ui.min.css" rel="stylesheet" type="text/css">
    		<link href="jquery-ui-1.12.1.custom/jquery-ui.css" rel="stylesheet" type="text/css">
     
    		<!-- Script de mon JS -->
    		<script src="pear2pear.js"></script>
     
    		<!-- CSS du Jquery -->
    		<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 src="jquery-ui-1.12.1.custom/jquery-ui.js"></script>
    		<script src="jquery-ui-1.12.1.custom/jquery-ui.min.js"></script>
     
    	</head>
     
    	<body onload="onLoad()">
     
    		<table id="MaterialTableId">
    			<caption>
    				Materiel
    			</caption>
    			<thead>
    				<tr id="title">
    					<th>
    						Intitulé
    					</th>
    					<th>
    						Prix Unitaire
    					</th>
    					<th>
    						Quantité Restante
    					</th>
    					<th>
    						Modifier le stock
    					</th>
    				</tr>
    			</thead>
    			<tbody id ="MaterialTableContentId">
    			</tbody>	
    		</table>
     
    			<button id="ajoutMateriel">Ajouter un produit</button>
     
    		<div id="materiel">
     
    			<form onsubmit="AddProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);FillMaterialTable();return false">
     
    				<p>
    					<label>Intitulé :</label>
    					<input id="intitule" class="intitule" type="text" required="required" />
    				</p>
    				<p>
    					<label>Prix unitaire :</label>
    					<input id="prix" class="prix" type="number" step="any" required="required" />
    				</p>
    				<p>
    					<label>Quantité restante :</label>
    					<input id="quantite" class="quantite" type="number" required="required" />
    				</p>
     
    				<input type="submit" class="submitDialog" value="Valider" />
    				<input type="reset" value="Annuler" />
     
    			</form>
     
    		</div>
     
    		<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>

    Ma page 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
    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
    113
    // Déclaration du tableau
     
    var ProductTabMateriel = []
     
    // Fonction init qui permet d'ajouter le JQuery des dialogs
     
    function Init() {
    	debugger;
     
    // Définition de la taille et de la position des dialog
     
    	$( "#materiel" ).dialog({
    		autoOpen: false, title: "Ajouter un matériel", height: 250, width: 450, margin:0, padding:0, modal: true,
    	});
     
    	$( "#modification" ).dialog({
    		autoOpen: false, title: "Modifier un matériel", height: 250, width: 450, margin:0, padding:0, modal: true,
    	});
     
    // Les Pop-UP (dialog)
     
    	$( "#ajoutMateriel" ).on( "click", function() {
    		$( "#materiel" ).dialog( "open" );
    		var $intitule = $('.intitule');
    		var $prix = $('.prix');
    		var $quantite = $('.quantite');
    			if (!$intitule.val() || !$prix.val() || !$quantite.val()) {
    				$('.submitDialog').attr('disabled', true);
    			}
    			else {
    				$('.submitDialog').attr('disabled', false);
    			}
    		$( '.submitDialog' ).on( "click", function() {
    				$( "#materiel" ).dialog( "close" );
    		})
    	});
     
    // Fonction qui grise le bouton valider si aucun champ est remplit 
     
    	$('#materiel').keyup(function() {
    		var $intitule = $('.intitule');
    		var $prix = $('.prix');
    		var $quantite = $('.quantite');
    			if (!$intitule.val() || !$prix.val() || !$quantite.val()) {
    				$('.submitDialog').attr('disabled', true);
    			}
    			else {
    				$('.submitDialog').attr('disabled', false);
    			}
    		}
    	).keyup();
     
    }
     
    // Fonction onLoad qui permet d'appeler toutes fonctions. Elle est exécuter dans le body du fichier HTML.
     
    function onLoad() {
    	debugger;
     
    	ProductTabMateriel.push({id: 1, name : "Processeur", price : 199.9, quantity : 15});
    	ProductTabMateriel.push({id: 2, name : "EcranLCD", price : 99.9, quantity : 3});
    	ProductTabMateriel.push({id: 3, name : "Carte mère", price : 338.14, quantity : 5});
    	ProductTabMateriel.push({id: 4, name : "Adaptateur VGA-HDMI", price : 7.99, quantity : 2});
    	ProductTabMateriel.push({id: 5, name : "Carte graphique", price : 449.99, quantity : 4});
     
    	Init();
        FillMaterialTable();
    }
     
    // Fonction qui permet l'affichage du tableau Matériel
     
    function FillMaterialTable() {
    	debugger;
     
    	var htmlContent = " ";
     
    	for(var i = 0; i < ProductTabMateriel.length; i++)
    	{
            htmlContent += "<tr><td>" + ProductTabMateriel[i].name + "</td><td>" + ProductTabMateriel[i].price + "</td><td>" + ProductTabMateriel[i].quantity + "</td><td>" + "<button onclick=EditClient("+ ProductTabMateriel[i].id +")>Modifier le stock</button>" + "</td></tr>";
    	}
     
    	$("#MaterialTableContentId").html(htmlContent);
        $("#MaterialTableContentId").show();
     
    }	
     
    // Fonction qui permet la modification du stock (elle ne marche pas entièrement, je bloque sur ça)
     
    function EditClient(id) {
    	debugger;
     
    	$( "#modification" ).dialog( "open" );	
     
        var current = $.grep(ProductTabMateriel, 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);
     
     
     
    }
     
    // Fonction qui permet l'ajout d'un Matériel.
     
    function AddProduct(nom, prix, quantite){
    	debugger;
     
    	ProductTabMateriel.push({name : nom, price : prix, quantity : quantite});
     
    }

    Ma page CSS :

    Code CSS : 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
    table{
        border-collapse: collapse;
        border: 1px solid black;
    	margin-bottom: 20px;
    	margin-top: 20px;
    }
    td{
        border: 1px solid black;
    	padding: 5px;
    }
    th {
        border: 1px solid black;
    	padding: 5px;
    }
    caption {
        border: 1px solid black;
        padding: 5px;
    }
    button {
        margin-bottom: 20px;
    }
    label {
    	float:left;
    	width:155px;
    }

    Est-ce mieux ? Plus compréhensible ? J'ai essayé de commenter mon code Javascript pour plus de compréhension.
    Et, maintenant, mon code Javascript est sur une seule page

    Par contre, pour le form qui est pas adapté, pourquoi pas. Mais, je peux le remplacer par quoi ? Il faut bien que j'appelle ma fonction.

    Merci pour ton code Badaze, il est nickel. Mais, il faut que les modifications se fasse sur les boutons "modifier le stock" :

    Nom : Capture.PNG
Affichages : 662
Taille : 34,6 Ko

    J'espère vraiment être plus clair et que mon code est plus compréhensible

    Merci !

  11. #11
    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
    Une version avec modification sur la ligne et sans submit.

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
     
    <!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");
    var status = null;
    var line   = null;
     
    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>"
          +"<td><input class='line' data-ligne="+i+" type='button' value='Modification stock'/></td>"
          +"</tr>";
     }
     
     $("#MaterialTableContentId").html(htmlContent);
        $("#MaterialTableContentId").show();
     
     $( function() {
      $( "input[type='button'].line" ).on( "click", function() {
       status = "upd";
       line   = $( this ).data( "ligne" );
       initProduct(line);
       $( "#dialog" ).dialog( "open" );
          $('#dialog').trigger('keyup');      
      });
          }
        );
     
    }
    function manageProduct() {
     if (status == "new") {
      AddProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);
     }
     
     if (status == "upd") {
      updateProduct(document.getElementById('intitule').value, document.getElementById('prix').value, document.getElementById('quantite').value);
     }
     
     FillMaterialTable();
     $( "#dialog" ).dialog( "close" );
     return false;
    }
     
    function AddProduct(nom, prix, quantite){
     ProductTab.push({name : nom, price : prix, quantity : quantite});
    } 
    function updateProduct(nom, prix, quantite){
     ProductTab[line].name     = nom;
     ProductTab[line].price    = prix;
     ProductTab[line].quantity = quantite;
    } 
    function initProduct(ligne) {
     if (ligne == null) {
      document.getElementById("intitule").value  = "";
      document.getElementById("prix").value      = "";
      document.getElementById("quantite").value  = ""; 
      
      document.getElementById("intitule").disabled  = false;
      document.getElementById("prix").disabled      = false;  
     } else {
      getProduct(ligne);
      
      document.getElementById("intitule").disabled  = true;
      document.getElementById("prix").disabled      = true;    
     }
    }
    function getProduct(ligne) {
     document.getElementById("intitule").value  = ProductTab[ligne].name;
     document.getElementById("prix").value      = ProductTab[ligne].price;
     document.getElementById("quantite").value  = ProductTab[ligne].quantity;
    }
    </script>  
    <script>
      $( function() {
             $( "#dialog" ).dialog({
                     autoOpen: false,  height: 400,width: 350,modal: true,
             });
            
             $( "#opener" ).on( "click", function() {
              status = "new";
        line   = null;
        initProduct(null);
                    $( "#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();
       
             $( "#cancel" ).on( "click", function() {
       initProduct(line);
       $('#dialog').trigger('keyup');
             }); 
             $( "#validate" ).on( "click", function() {
       manageProduct();
             });   
               
      }
     );
    </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>
          &nbsp;
         </th>     
        </tr>
       </thead>
       <tbody id ="MaterialTableContentId"></tbody>
      </table>
      <div id="dialog">
        <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="button" id="validate" class="submit" value="Valider" />
        <input type="button" id="cancel" value="Annuler" />
      </div>
      <button id="opener">Ajouter un produit</button>
     </body>
    </html>

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Par défaut
    Merci pour l'effort.

    Point de vue code, il y a encore beaucoup à dire, et il y encore 2,3 choses qui m’échappent.

    par exemple pourquoi utiliser les balises <Form ?
    ton code n’envoie nulle par sur un serveur les moindres données et
    elles ne font que te compliquer la vie, car ce sont elles qui effacent tes données saisies.

    sinon tes deux Forms, outre le fait qu'ils sont identiques utilisent aussi des champs portant le même ID, et ça c'est interdit.

    en fait tu devrai virer ces 2 balises form et utiliser le même module de dialogue pour ajouter ou modifier tes produits

  13. #13
    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 à vous deux pour votre aide. Le code marche parfaitement Badaze, c'est nickel

    Tu as raisons Psychadelic, le form ne sert à rien. Dans le code de Badaze, je n'ai plus les balises form

    Merci vraiment

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Par défaut
    bon, entre temps, j'ai de mon coté "pondu" une solution... qui utilise une balise <form parce qu'elle permet de gérer un reset sur tous les champs et d'autres trucs autour du disabled sur le bouton de validation du formulaire.

    d'ailleurs je n'ai laissé qu'un seul formulaire sur lequel je change le titre selon le besoin

    J'ai aussi fait attention à garder le coté jQuery / jQuery UI.

    J'ai aussi vu que tu avais fait l'impasse sur la gestion des ID dans la table ProductTabMateriel et que tu avais aussi laissé du code JS dans la partie HTML, comme le <body onload="onLoad()"> et le <form onsubmit="AddProduct(document.getElementB......

    Donc voila ce que ça donne
    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
    <body>
     
      <table id="MaterialTableId">
        <caption> Matériel </caption>
        <thead>
          <tr id="title">
            <th> Intitulé </th>
            <th> Prix Unitaire </th>
            <th> Quantité Restante </th>
            <th> Modifier le stock </th>
          </tr>
        </thead>
        <tbody id="MaterialTableContentId"></tbody>
      </table>
     
      <button id="bt-Ajout">Ajouter un produit</button>
     
      <div id="dial-matos">
        <form>
          <p>
            <label for="intitule">Intitulé :</label>
            <input id="intitule" class="intitule" type="text" required="required" />
          </p>
          <p>
            <label for="prix">Prix unitaire :</label>
            <input id="prix" class="prix" type="number" step="any" required="required" />
          </p>
          <p>
            <label for="quantite">Quantité restante :</label>
            <input id="quantite" class="quantite" type="number" required="required" />
          </p>
     
          <input id="bt-dial-valid" type="submit" value="Valider" data-ref="-1" />
          <input id="bt-dial-clear" type="reset" value="clear" />
        </form>
      </div>
     
    </body>


    et coté
    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
    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    $(function () { // Quand tout le HTML et la page est prete cela remplace le <body onload="onLoad()">
     
     
      var ProductTabMateriel = [{ id: 1, name : "Processeur", price: 199.9,  quantity: 15 }
                              , { id: 2, name : "EcranLCD",   price: 99.9,   quantity: 3  }
                              , { id: 3, name : "Carte mère", price: 338.14, quantity: 5  }
                              , { id: 4, name : "Adaptateur VGA-HDMI", price: 7.99,   quantity: 2 }
                              , { id: 5, name : "Carte graphique",     price: 449.99, quantity: 4 }
                              ]; 
     
      var
        $Dial_Saisie = $('#dial-matos'),
        $Bt_Validation = $('#bt-dial-valid'),
        $intitule = $('#intitule'),
        $prix = $('#prix'),
        $quantite = $('#quantite')
        ;
     
     
      $.each(ProductTabMateriel, function (Idx, Matos) {
        Table_Product_Ajout(Matos.id, Matos.name, Matos.price, Matos.quantity)
      });
     
      function Table_Product_Ajout(id, name, price, Qte) {
        var nvTR = '<tr><td>' + name;
        nvTR += '</td><td>' + price;
        nvTR += '</td><td>' + Qte;
        nvTR += '</td><td><button class="Modif" data-ref="' + id;
        nvTR += '">Modifier</button></td></tr>';
     
        $('#MaterialTableId > tbody:last').append(nvTR);
      }
     
     
      $Dial_Saisie.dialog({  // on prévient jQuery UI que ce truc va servir de Dialogue
        autoOpen: false,
        title: "",
        height: 250,
        width: 450,
        margin: 0,
        padding: 0,
        modal: true
      });
     
     
      // ajout d'une ligne matérielle (lancement dialogue)
     
      $("#bt-Ajout").on("click", function () {
        $("#dial-matos > form")[0].reset();
        $Bt_Validation.data('ref', '-1'); // valeur négative permet de savoir que le Dial est utilisé pour un Ajout
        Bt_saisie_Status();
        $intitule.attr('disabled', false);
        $prix.attr('disabled', false);
        $("#bt-dial-clear").attr('disabled', false);
     
        $Dial_Saisie.dialog({ title: "Ajouter un matériel" }).dialog("open");
      });
     
     
      // modification d'une ligne matérielle (lancement dialogue)
     
      $('#MaterialTableId').on("click", "button.Modif", function () {
        let
          refID = parseInt($(this).data('ref')),
          idx = ProductTabMateriel.findIndex(Matos => Matos.id === refID);
     
        $intitule.val(ProductTabMateriel[idx].name).attr('disabled', true);
        $prix.val(ProductTabMateriel[idx].price).attr('disabled', true);
        $quantite.val(ProductTabMateriel[idx].quantity);
        $Bt_Validation.data('ref', ProductTabMateriel[idx].id);
     
        $("#bt-dial-clear").attr('disabled', true);
     
        Bt_saisie_Status();
     
        $Dial_Saisie.dialog({ title: "Modification matériel" }).dialog("open");
      });
     
     
      // Validation de la saisie.... ( sur les 2 Dialogues )
     
      $Bt_Validation.on("click", function (e) {
        e.preventDefault(); // désactive l'action de rechargement de la page que le "submit" lance automatiquement
     
        var
          refID = parseInt($Bt_Validation.data('ref')),
          xNom = $intitule.val(),
          xPrix = parseFloat($prix.val()),
          xQte = parseInt($quantite.val());
     
        if (refID < 0) // ==> mode = ajout d'une ligne dans le tableau
        {
          refID = Calcul_Nv_ID();
     
          ProductTabMateriel.push({ id: refID, name: xNom, price: xPrix, quantity: xQte });
     
          Table_Product_Ajout(refID, xNom, xPrix, xQte);
        }
        else          // ==> mode = modification d'une ligne dans le tableau ...
        {
          var
            idx = ProductTabMateriel.findIndex(Matos => Matos.id === refID),
            xTR = $("#MaterialTableContentId").find("tr").eq(idx)
            ;
          ProductTabMateriel[idx].name = xNom;
          ProductTabMateriel[idx].price = xPrix;
          ProductTabMateriel[idx].quantity = xQte;
     
          xTR.find('td').eq(0).text(xNom);
          xTR.find('td').eq(1).text(xPrix);
          xTR.find('td').eq(2).text(xQte);
        }
     
        $Dial_Saisie.dialog("close");
      });
     
     
      // controle de saisie sur le dialoque...
     
      $intitule.on('change', Bt_saisie_Status);
      $prix.on('change', Bt_saisie_Status);
      $quantite.on('change', Bt_saisie_Status);
     
      $Dial_Saisie.keyup(Bt_saisie_Status).keyup();
     
      $('#bt-dial-clear').on("click", function (e) {
        $Bt_Validation.attr('disabled', true);
      });
     
      // gestion du On / Off du bouton de saisie
      function Bt_saisie_Status() {
        var
          NoValid = $Dial_Saisie.find('input:invalid').length,
          Status = (!$intitule.val() || !$prix.val() || !$quantite.val() || NoValid > 0);
        $Bt_Validation.attr('disabled', Status);
      }
     
     
      // fournisseur d`ID
      function Calcul_Nv_ID() {
        let iRef = ProductTabMateriel.map(x => x.id).sort((a, b) => a - b).findIndex((x, i) => x > i);
        if (iRef < 0) iRef = ProductTabMateriel.length;
        return iRef;
      }
     
    }); /// jQuery

+ 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