Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec listes déroulantes

14 octobre 2021 à 21:28:41

Bonjour à tous,

Je vais vous expliquer mon problème :

J'ai une première liste déroulante que je prénom "Couleur". Dedans j'ai 3 couleurs (bleu clair, bleu foncé et moutarde).

Quand je choisi une couleur, une 2ème liste déroulante s'affiche et je choisi d'autres couleur.

Exemple :

Le problème quand je fait mon insertion dans ma base de donnée, c'est toujours la 3ème couleur qui s’enregistre ici d’après mon code ci-dessous "m3" s'enregistre.

Comment puis-je faire pour régler le problème

						<label for="couleur_produit">Couleur du nid d'ange : </label>
							<?php
							$req = $bdd -> query("SELECT s.couleur_id, s.stock, c.couleur, s.produit_id, c.couleur_id AS couleur_id
									FROM stocks AS s
									INNER JOIN couleurs AS c
									ON c.couleur_id = s.couleur_id
									WHERE s.produit_id=42") or die(print_r($bdd->errorInfo()));
							?>
							<select name="couleur_produit" id="couleur_produit" size="1">
								<?php
								echo '<option>Selectionner</option>';
								While($donnees = $req->fetch())
								{
									$couleur_id = $donnees['couleur_id'];
									$couleur = $donnees['couleur'];
									$stock = $donnees['stock'];
									
									if ($stock !='0')
									{
										echo '<option value="' . $couleur_id . '">' . $couleur . ' en stock : ' . $stock . '</option>';
									}
								}
								?>
							</select><br /><br />		

						

						<div id="couleur1">
							<label>Second couleur : </label>
								<select name="texte01" id="texte01">
									<option value="bc1">Bleu clair 1</option>
									<option value="bc2">Bleu clair 2</option>
								</select>
						</div>
						

						<div id="couleur2">
							<label>Second couleur : </label>
								<select name="texte01" id="texte01">
									<option value="bf1">Bleu foncé 1</option>
									<option value="bf2">Bleu foncé 2</option>
								</select>	
						</div>

					
						<div id="couleur3">
							<label>Second couleur : </label>
								<select name="texte01" id="texte01">
									<option value="m3">Moutarde 1</option>
									<option value="m4">Moutarde 2</option>
								</select>	
									
						</div>



<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
 
    $('#couleur1').hide(); // on ne cache pas le champ par défaut
     
    $('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
    var valeur = $(this).val(); // valeur sélectionnée
     
        if(valeur != '') { // si non vide
            if(valeur == '137') { // si "autre"
                $('#couleur1').show();
            } else {
                $('#couleur1').hide();           
            }
        }
    });
 
});
</script>


<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
 
    $('#couleur2').hide(); // on ne cache pas le champ par défaut
     
    $('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
    var valeur = $(this).val(); // valeur sélectionnée
     
        if(valeur != '') { // si non vide
            if(valeur == '154') { // si "autre"
                $('#couleur2').show();
            } else {
                $('#couleur2').hide();           
            }
        }
    });
 
});
</script>



<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
 
    $('#couleur3').hide(); // on ne cache pas le champ par défaut
     
    $('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
    var valeur = $(this).val(); // valeur sélectionnée
     
        if(valeur != '') { // si non vide
            if(valeur == '155') { // si "autre"
                $('#couleur3').show();
            } else {
                $('#couleur3').hide();           
            }
        }
    });
 
});
</script>


Merci pour votre aide



-
Edité par psgman80 14 octobre 2021 à 21:29:53

  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2021 à 1:12:59

"Le problème quand je fait mon insertion dans ma base de donnée, c'est toujours la 3ème couleur qui s’enregistre ici d’après mon code ci-dessous "m3" s'enregistre."

Ta requête fait de la lecture (SELECT), mais, tu parles d'insertion (INSERT INTO). Et "s'enregistre", que veux-tu dire ? Et où ? Dans la BDD, dans la liste déroulante, autre part ?

Tes nombres magiques m'intriguent également.

  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2021 à 20:25:38

CristianoRolando a écrit:

"Le problème quand je fait mon insertion dans ma base de donnée, c'est toujours la 3ème couleur qui s’enregistre ici d’après mon code ci-dessous "m3" s'enregistre."

Ta requête fait de la lecture (SELECT), mais, tu parles d'insertion (INSERT INTO). Et "s'enregistre", que veux-tu dire ? Et où ? Dans la BDD, dans la liste déroulante, autre part ?

Tes nombres magiques m'intriguent également.

Oui plus loin j'enregistre dans une BDD.

Je donne des extrait de code :

				//Test Couleur nid ange////////////////////////////////////
				if(isset($_POST['couleur_produit']))
				{
					$couleur_produit = ($_POST['couleur_produit']);
				}
				else
				{
					header('Location: ../index.php');
					exit();
				}
				
				//Test Couleur second////////////////////////////////////
				if(isset($_POST['texte01']))
				{
					$texte01 = ($_POST['texte01']);
				}
				else
				{
					header('Location: ../index.php');
					exit();
				}













			//ajouter l'articles au panier
				$req = $bdd->prepare('INSERT INTO panier(membre_id, produit_id, commande_id, prix, couleur_produit, texte01, texte,
											texte_couleur, precisez, commentaire, date_panier)
									VALUES(:membre_id, :produit_id, :commande_id, :prix, :couleur_produit, :texte01, :texte, 
											:texte_couleur, :precisez, :commentaire, :date_panier)');
			
				$req->execute(array(
						'membre_id' => $_SESSION['membre_id'],
						'produit_id' => $produit,
						'commande_id' => $commande,
						'prix' => $prix,
						'couleur_produit' => $couleur_produit,
						'texte01' => $texte01,
						'texte' => $prenom,
						'texte_couleur' => $couleur_brod,
						'precisez' => $precisez,
						'commentaire' => $commentaire,
						'date_panier' => time()
						));

C'est quoi les nombres magiques??

Merci



  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2021 à 0:05:55

Quand tu dis que c'est toujours la 3ème couleur qui s'enregistre, où s'enregistre-t-elle ? Et est-ce cette couleur qui s'enregistre même si tu sélectionnes une autre couleur ?

Peut-être que ton while ligne 12 de ton premier code source est mal conçu.

Les nombres magiques sont des variables, ou plus souvent des constantes, mais qui ne sont pas stockées et inscrits directement, comme par magie, dans le code. Par exemple, à une ligne, tu testes si valeur vaut 155. Ça signifie quoi 155 ? En commentaire, tu vérifies si valeur vaut "autre", pourquoi ne pas créer une variable de type chaîne de caractères ? Ou mieux, si la valeur possible est OUI ou NON, une variable booléenne ?

  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2021 à 20:42:46

CristianoRolando a écrit:

Quand tu dis que c'est toujours la 3ème couleur qui s'enregistre, où s'enregistre-t-elle ? Et est-ce cette couleur qui s'enregistre même si tu sélectionnes une autre couleur ?

Peut-être que ton while ligne 12 de ton premier code source est mal conçu.

Les nombres magiques sont des variables, ou plus souvent des constantes, mais qui ne sont pas stockées et inscrits directement, comme par magie, dans le code. Par exemple, à une ligne, tu testes si valeur vaut 155. Ça signifie quoi 155 ? En commentaire, tu vérifies si valeur vaut "autre", pourquoi ne pas créer une variable de type chaîne de caractères ? Ou mieux, si la valeur possible est OUI ou NON, une variable booléenne ?

Bonjour,

Elle s'enregistre dans la BDD.

Oui même si je change de couleur c'est toujours la 3ème qui s'enregistre.

Même quand je change les emplacements.

Exemple ci-dessous:

<label for="couleur_produit">Couleur du nid d'ange : </label>
    <?php
    $req = $bdd -> query("SELECT s.couleur_id, s.stock, c.couleur, s.produit_id, c.couleur_id AS couleur_id
            FROM stocks AS s
            INNER JOIN couleurs AS c
            ON c.couleur_id = s.couleur_id
            WHERE s.produit_id=42") or die(print_r($bdd->errorInfo()));
    ?>
    <select name="couleur_produit" id="couleur_produit" size="1">
        <?php
        echo '<option>Selectionner</option>';
        While($donnees = $req->fetch())
        {
            $couleur_id = $donnees['couleur_id'];
            $couleur = $donnees['couleur'];
            $stock = $donnees['stock'];
             
            if ($stock !='0')
            {
                echo '<option value="' . $couleur_id . '">' . $couleur . ' en stock : ' . $stock . '</option>';
            }
        }
        ?>
    </select><br /><br />    
 
 
 
<div id="couleur1">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="bc1">Bleu clair 1</option>
            <option value="bc2">Bleu clair 2</option>
        </select>
</div>
 
 
<div id="couleur2">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="bf1">Bleu foncé 1</option>
            <option value="bf2">Bleu foncé 2</option>
        </select>
</div>
 
 
<div id="couleur3">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="m3">Moutarde 1</option>
            <option value="m4">Moutarde 2</option>
        </select>
             
</div>
m3 s'enregistre
<label for="couleur_produit">Couleur du nid d'ange : </label>
    <?php
    $req = $bdd -> query("SELECT s.couleur_id, s.stock, c.couleur, s.produit_id, c.couleur_id AS couleur_id
            FROM stocks AS s
            INNER JOIN couleurs AS c
            ON c.couleur_id = s.couleur_id
            WHERE s.produit_id=42") or die(print_r($bdd->errorInfo()));
    ?>
    <select name="couleur_produit" id="couleur_produit" size="1">
        <?php
        echo '<option>Selectionner</option>';
        While($donnees = $req->fetch())
        {
            $couleur_id = $donnees['couleur_id'];
            $couleur = $donnees['couleur'];
            $stock = $donnees['stock'];
             
            if ($stock !='0')
            {
                echo '<option value="' . $couleur_id . '">' . $couleur . ' en stock : ' . $stock . '</option>';
            }
        }
        ?>
    </select><br /><br />    
 
 
 
<div id="couleur1">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="bc1">Bleu clair 1</option>
            <option value="bc2">Bleu clair 2</option>
        </select>
</div> 
 
<div id="couleur3">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="m3">Moutarde 1</option>
            <option value="m4">Moutarde 2</option>
        </select>
             
</div>

<div id="couleur2">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="bf1">Bleu foncé 1</option>
            <option value="bf2">Bleu foncé 2</option>
        </select>
</div>
bf1 s'enregistre
<label for="couleur_produit">Couleur du nid d'ange : </label>
    <?php
    $req = $bdd -> query("SELECT s.couleur_id, s.stock, c.couleur, s.produit_id, c.couleur_id AS couleur_id
            FROM stocks AS s
            INNER JOIN couleurs AS c
            ON c.couleur_id = s.couleur_id
            WHERE s.produit_id=42") or die(print_r($bdd->errorInfo()));
    ?>
    <select name="couleur_produit" id="couleur_produit" size="1">
        <?php
        echo '<option>Selectionner</option>';
        While($donnees = $req->fetch())
        {
            $couleur_id = $donnees['couleur_id'];
            $couleur = $donnees['couleur'];
            $stock = $donnees['stock'];
             
            if ($stock !='0')
            {
                echo '<option value="' . $couleur_id . '">' . $couleur . ' en stock : ' . $stock . '</option>';
            }
        }
        ?>
    </select><br /><br />    
 
 
<div id="couleur2">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="bf1">Bleu foncé 1</option>
            <option value="bf2">Bleu foncé 2</option>
        </select>
</div>
 
 
<div id="couleur3">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="m3">Moutarde 1</option>
            <option value="m4">Moutarde 2</option>
        </select>
             
</div>

<div id="couleur1">
    <label>Second couleur : </label>
        <select name="texte01" id="texte01">
            <option value="bc1">Bleu clair 1</option>
            <option value="bc2">Bleu clair 2</option>
        </select>
</div>
bc1 s'enregistre

Quelque soit la couleur que je sélectionne ci-dessous

<label for="couleur_produit">Couleur du nid d'ange : </label>
    <?php
    $req = $bdd -> query("SELECT s.couleur_id, s.stock, c.couleur, s.produit_id, c.couleur_id AS couleur_id
            FROM stocks AS s
            INNER JOIN couleurs AS c
            ON c.couleur_id = s.couleur_id
            WHERE s.produit_id=42") or die(print_r($bdd->errorInfo()));
    ?>
    <select name="couleur_produit" id="couleur_produit" size="1">
        <?php
        echo '<option>Selectionner</option>';
        While($donnees = $req->fetch())
        {
            $couleur_id = $donnees['couleur_id'];
            $couleur = $donnees['couleur'];
            $stock = $donnees['stock'];
             
            if ($stock !='0')
            {
                echo '<option value="' . $couleur_id . '">' . $couleur . ' en stock : ' . $stock . '</option>';
            }
        }
        ?>
    </select><br /><br />  


Pour information, 155 correspond à un "id" d'une table qui s'appelle "couleur".

En faite "autre", c'est un copier coller. C'est vrai que je fais pas trop attention au commentaire.

Une idée à mon problème?

Merci










  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2021 à 21:38:54

C'est normal : si tes select ont le même name, tu ne récupéreras que la valeur du dernier d'entre eux.

Je ne sais pas trop ce que tu veux faire mais sinon il faut rajouter des [] (name="texte01" devient name="texte01[]") pour alors obtenir un tableau en PHP ($_POST['texte01']) avec la valeur respective de chacun.

(teste par un var_dump)

-
Edité par julp 17 octobre 2021 à 21:41:42

  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2021 à 21:21:20

julp a écrit:

C'est normal : si tes select ont le même name, tu ne récupéreras que la valeur du dernier d'entre eux.

Je ne sais pas trop ce que tu veux faire mais sinon il faut rajouter des [] (name="texte01" devient name="texte01[]") pour alors obtenir un tableau en PHP ($_POST['texte01']) avec la valeur respective de chacun.

(teste par un var_dump)

-
Edité par julp il y a environ 22 heures

Hello,

Quel est le nom de ce genre de chose "name="texte01[]""? Pour que je fasse des recherches.

Tu veux que je fasse un var_dump sur quelle variable?

Merci



  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2021 à 22:22:21

Pour ma part, je t'interrogeais pour qu'on ait des pistes. Je n'ai pas la technique en PHP. Quand tu as dit que ça s'enregistrait dans la BDD, je me suis posé la question ensuite : si on sélectionne X fois la même couleur alors elle va s'enregistrer X fois dans la BDD, non ? Ce qui est totalement contre-productif.

Le code provient de toi ?

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2021 à 21:14:05

julp a écrit:

C'est normal : si tes select ont le même name, tu ne récupéreras que la valeur du dernier d'entre eux.

Je ne sais pas trop ce que tu veux faire mais sinon il faut rajouter des [] (name="texte01" devient name="texte01[]") pour alors obtenir un tableau en PHP ($_POST['texte01']) avec la valeur respective de chacun.

(teste par un var_dump)

-
Edité par julp 17 octobre 2021 à 21:41:42



Bonjour,

J'ai fait ceci

						<label for="couleur_produit">Couleur du nid d'ange : </label>
							<?php
							$req = $bdd -> query("SELECT s.couleur_id, s.stock, c.couleur, s.produit_id, c.couleur_id AS couleur_id
									FROM stocks AS s
									INNER JOIN couleurs AS c
									ON c.couleur_id = s.couleur_id
									WHERE s.produit_id=42") or die(print_r($bdd->errorInfo()));
							?>
							<select name="couleur_produit" id="couleur_produit" size="1">
								<?php
								echo '<option>Selectionner</option>';
								While($donnees = $req->fetch())
								{
									$couleur_id = $donnees['couleur_id'];
									$couleur = $donnees['couleur'];
									$stock = $donnees['stock'];
									
									if ($stock !='0')
									{
										echo '<option value="' . $couleur_id . '">' . $couleur . ' en stock : ' . $stock . '</option>';
									}
								}
								?>
							</select><br /><br />		

						

						<div id="couleur1">
							<label>Second couleur : </label>
						<select name="texte01[1]" id="texte01">
									<option value="bc1">Bleu clair 1</option>
									<option value="bc2">Bleu clair 2</option>
								</select>
						</div>
						

						<div id="couleur2">
							<label>Second couleur : </label>
								<select name="texte01[2]" id="texte01">
									<option value="bf1">Bleu foncé 1</option>
									<option value="bf2">Bleu foncé 2</option>
								</select>	
						</div>

					
						<div id="couleur3">
							<label>Second couleur : </label>
								<select name="texte01[3]" id="texte01">
									<option value="m3">Moutarde 1</option>
									<option value="m4">Moutarde 2</option>
								</select>	
									
						</div>


    //Test Couleur nid ange////////////////////////////////////
    if(isset($_POST['couleur_produit']))
    {
        $couleur_produit = ($_POST['couleur_produit']);
    }
    else
    {
        header('Location: ../index.php');
        exit();
    }
     
    //Test Couleur second////////////////////////////////////
    if(isset($_POST['texte01']))
    {
        $texte01 = ($_POST['texte01']);
    }
    else
    {
        header('Location: ../index.php');
        exit();
    }
 
 
 
 
 
 
 
 
 
 
 
 
 
//ajouter l'articles au panier
    $req = $bdd->prepare('INSERT INTO panier(membre_id, produit_id, commande_id, prix, couleur_produit, texte01, texte,
                                texte_couleur, precisez, commentaire, date_panier)
                        VALUES(:membre_id, :produit_id, :commande_id, :prix, :couleur_produit, :texte01, :texte,
                                :texte_couleur, :precisez, :commentaire, :date_panier)');
 
    $req->execute(array(
            'membre_id' => $_SESSION['membre_id'],
            'produit_id' => $produit,
            'commande_id' => $commande,
            'prix' => $prix,
            'couleur_produit' => $couleur_produit,
            'texte01' => $texte01,
            'texte' => $prenom,
            'texte_couleur' => $couleur_brod,
            'precisez' => $precisez,
            'commentaire' => $commentaire,
            'date_panier' => time()
            ));

Et sa enregistre "Array" dans la BDD



  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2021 à 21:18:09

> Et ça enregistre "Array" dans la BDD

C'est normal, tu ne peux pas insérer un tableau comme ça. De toute façon, tu ne devrais pas stocker plusieurs valeurs dans une même colonne pour commencer.

Il ne devrait pas être nécessaire de préciser ces clés 1, 2, 3.

-
Edité par julp 19 octobre 2021 à 21:19:21

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2021 à 21:29:36

julp a écrit:

> Et ça enregistre "Array" dans la BDD

C'est normal, tu ne peux pas insérer un tableau comme ça. De toute façon, tu ne devrais pas stocker plusieurs valeurs dans une même colonne pour commencer.

Il ne devrait pas être nécessaire de préciser ces clés 1, 2, 3.

-
Edité par julp il y a moins de 30s

Je ne veux pas enregistrer plusieurs valeur dans une même colonne. Au contraire, je n'en veux qu'une.

Je vais réexpliquer mon code.

J'ai une première liste déroulante que je prénom "Couleur". Dedans j'ai 3 couleurs

- bleu clair

- bleu foncé

- moutarde.

Si je sélectionne "bleu clair", une 2ème liste déroulante s'affiche grace à javascript et la j'ai

- bl1

- bl2

Si je décide plutôt le bleu foncé, alors c'est une autre liste déroulante qui s'affiche avec

- bf1

- bf2

etc.

Dans ma colonne "texte01" j'ai sois bc1, bc2, bf1 ou bf2 qui s'enregistre

As-tu compris?

Peux-tu m'aider à coder ceci?

Merci



-
Edité par psgman80 19 octobre 2021 à 21:31:20

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2021 à 21:41:08

Erf, désolé, je n'avais pas compris ton problème, toute l'approche n'est pas bonne, il te faudrait surtout du Javascript parce que tu ne dois pas avoir les 3 select actifs pour les couleurs "finales" dans le DOM en même temps sinon, forcément, ou tu vas avoir la dernière à apparaître ou les trois (suivant leurs name).

Ok, j'avais oublié ton code JS n'étant pas remonté jusqu'au premier post mais show/hide ne va pas convenir/être suffisant car cacher quelque chose fait qu'il est toujours présent dans le DOM donc le select en est toujours envoyé (d'où l'écrasement observé au départ). Le plus simple, dans ce cas, c'est avant tout de passer le select en disabled car les champs disabled ne sont pas envoyés.

Si j'ai bonne mémoire en plus de $('...').hide(); il faudrait faire un $('... select').prop('disabled', true); (false lors du show - peut être restreindre le sélecteur).

Une autre option (sans jeu de mot), mais je ne pense pas que ce serait plus simple dans le cas présent, pourrait être de n'avoir qu'un select au lieu des 3 pour le vider de ces options et n'y (re)mettre que celles qui sont applicables.

-
Edité par julp 20 octobre 2021 à 13:27:35

  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2021 à 12:55:01

julp a écrit:

Erf, désolé, je n'avais pas compris ton problème, toute l'approche n'est pas bonne, il te faudrait surtout du Javascript parce que tu ne dois pas avoir les 3 select actifs pour les couleurs "finales" dans le DOM en même temps sinon, forcément, ou tu vas avoir la dernière à apparaître ou les trois (suivant leurs name).

Ok, j'avais oublié ton code JS n'étant pas remonté jusqu'au premier post mais show/hide ne va pas convenir/être suffisant car cacher quelque chose fait qu'il est toujours présent dans le DOM donc le select en est toujours envoyé (d'où l'écrasement observé au départ). Le plus simple, dans ce cas, c'est avant tout de passer le select en disabled car les champs disabled ne sont pas envoyés.

Si j'ai bonne mémoire en plus de $('...').hide(); il faudrait faire un $('... select').prop('disabled', false); (true lors du show - peut être restreindre le sélecteur).

Une autre option (sans jeu de mot), mais je ne pense pas que ce serait plus simple dans le cas présent, pourrait être de n'avoir qu'un select au lieu des 3 pour le vider de ces options et n'y (re)mettre que celles qui sont applicables.

-
Edité par julp il y a environ 13 heures


J'ai fait ceci :

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
 
    $('#couleur1').hide(); // on ne cache pas le champ par défaut
     
    $('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
    var valeur = $(this).val(); // valeur sélectionnée
     
        if(valeur != '') { // si non vide
            if(valeur == '137') { // si "autre"
                $('#couleur1').show();
                $('#couleur1 select').prop('disabled', true);
            } else {
                $('#couleur1').hide();  
                $('#couleur1 select').prop('disabled', false);
            }
        }
    });
 
});
</script>


<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
 
    $('#couleur2').hide(); // on ne cache pas le champ par défaut
     
    $('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
    var valeur = $(this).val(); // valeur sélectionnée
     
        if(valeur != '') { // si non vide
            if(valeur == '154') { // si "autre"
                $('#couleur2').show();
                $('#couleur2 select').prop('disabled', true);
            } else {
                $('#couleur2').hide(); 
                $('#couleur2 select').prop('disabled', false);
            }
        }
    });
 
});
</script>



<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" /></script>
<script type="text/javascript">
$(document).ready(function() {
 
    $('#couleur3').hide();// on ne cache pas le champ par défaut
     
    $('select[name="couleur_produit"]').change(function() { // lorsqu'on change de valeur dans la liste
    var valeur = $(this).val(); // valeur sélectionnée
     
        if(valeur != '') { // si non vide
            if(valeur == '155') { // si "autre"
                $('#couleur3').show();
                $('#couleur3 select').prop('disabled', true);
            } else {
                $('#couleur3').hide(); 
                $('#couleur3 select').prop('disabled', false);
            }
        }
    });
 
});
</script>

Par contre seulement le 1er select s'affiche pas les autres.

D'où peux venir l'erreur?

  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2021 à 13:35:39

Oh, le boulet, j'ai inversé les true/false pour disabled.

> Par contre seulement le 1er select s'affiche pas les autres.

Pas sûr de comprendre : c'est-à-dire ? Si j'ai le temps, j'essaie de tester le truc.

Sur les // on ne cache pas le champ par défaut il faudrait aussi faire le disabled (la négation est de trop dans le commentaire, non ?)

Tes select ne peuvent pas avoir le même id non plus.

Tu n'as pas moyen de DRY ton code JS ? Tu as trois fois le même code, y compris le chargement de jQuery. Tu pourrais faire tous les show/hide & cie dans la même fonction. D'aileurs, les id hardcodés côté JS, ce n'est pas terrible.

-
Edité par julp 20 octobre 2021 à 13:37:11

  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2021 à 15:54:01

julp a écrit:

Oh, le boulet, j'ai inversé les true/false pour disabled.

> Par contre seulement le 1er select s'affiche pas les autres.

Pas sûr de comprendre : c'est-à-dire ? Si j'ai le temps, j'essaie de tester le truc.

Sur les // on ne cache pas le champ par défaut il faudrait aussi faire le disabled (la négation est de trop dans le commentaire, non ?)

Tes select ne peuvent pas avoir le même id non plus.

Tu n'as pas moyen de DRY ton code JS ? Tu as trois fois le même code, y compris le chargement de jQuery. Tu pourrais faire tous les show/hide & cie dans la même fonction. D'aileurs, les id hardcodés côté JS, ce n'est pas terrible.

-
Edité par julp il y a environ 1 heure


En java j'y connais vraiment rien.

C'est grâce à ce forum que l'on m'a aider à le créer

On m'avait aidé pour 1 "select" et comme là j'ai besoin de 3 donc j'ai multiplier avec ce code.

Surement qu'il faut le DRY mais j'y connais pas grand chose.

  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2021 à 20:52:28

julp a écrit:

Ton code affiche les 3 (à tour de rôle)

Oh P*****

Avec ton code sa fonctionne merci beaucoup plus de 15j que je me prends la tête

Merci beaucoup julp



  • Partager sur Facebook
  • Partager sur Twitter