2
votes

Sélecteur de case à cocher mâle ou femelle

Un seul sera sélectionné. Cela fonctionne correctement lorsque je sélectionne une femme pour la première fois. En fait, je veux implémenter que si je sélectionne un homme plutôt qu'une femme, je décocherai automatiquement si je coche une femme, un homme décochera automatiquement

        <p>Display some text when the checkbox is checked:</p>
    
    
    <label for="myCheck">Checkbox:</label> 
    <input type="checkbox" id="myCheck1" onclick="myFunction()">
    <input type="checkbox" id="myCheck2" onclick="myFunction()">
    
    
    
    
    <p id="text" style="display:none">Checkbox is CHECKED! for male</p>
    <p id="text2" style="display:none">Checkbox is CHECKED! for female</p>
    
    function myFunction() {
      var checkBox = document.getElementById("myCheck1");
      var checkBox2 = document.getElementById("myCheck2");
      var text = document.getElementById("text");
      var text2 = document.getElementById("text2");
      
      if (checkBox.checked == true){
        text.style.display = "block";
        text2.style.display = "none";
        checkBox2.checked=false;
        
    
      } else if(checkBox2.checked == true) {
         text2.style.display = "block";
         text.style.display = "none";
        checkBox.checked=false;
         
      }
      
      
      else{
          text.style.display = "none";
           text2.style.display = "none";
          
      }
    }


2 commentaires

Je comprends que vous utilisez type=checkbox , mais pour ce type de vérification, il vaut mieux utiliser type=radio , de cette façon, une fois que vous sélectionnez une option, les autres seront automatiquement désélectionnées. Pour plus d'informations, consultez la référence Mozilla sur le type d'entrée: "radio"


@DyeizonProcopiuk, cela ne permet pas de revenir à un état indéfini de la radio.


3 Réponses :


2
votes

Vous devez savoir quelle case à cocher appelle la fonction et vous pouvez remettre l'élément pour vérifier l'élément réel.

<p>Display some text when the checkbox is checked:</p>
<label for="myCheck">Checkbox:</label>
<input type="checkbox" id="myCheck1" onclick="myFunction(this)">
<input type="checkbox" id="myCheck2" onclick="myFunction(this)">
<p id="text" style="display:none">Checkbox is CHECKED! for male</p>
<p id="text2" style="display:none">Checkbox is CHECKED! for female</p>
function myFunction(element) {
    var boxes = [
            [document.getElementById("myCheck1"), document.getElementById("text")],
            [document.getElementById("myCheck2"), document.getElementById("text2")]
        ];

    if (element.checked) {
        boxes.forEach(([c, t]) => {
            if (element === c) {
                t.style.display = "block";
            } else {
                t.style.display = "none";
                c.checked = false;
            }
        });
        return;
    }
    boxes.forEach(([, t]) => t.style.display = "none");
}

Une approche légèrement différente

<p>Display some text when the checkbox is checked:</p>
<label for="myCheck">Checkbox:</label>
<input type="checkbox" id="myCheck1" onclick="myFunction(this)">
<input type="checkbox" id="myCheck2" onclick="myFunction(this)">
<p id="text" style="display:none">Checkbox is CHECKED! for male</p>
<p id="text2" style="display:none">Checkbox is CHECKED! for female</p>
function myFunction(element) {
    var checkBox = document.getElementById("myCheck1");
    var checkBox2 = document.getElementById("myCheck2");
    var text = document.getElementById("text");
    var text2 = document.getElementById("text2");

    if (element === checkBox && checkBox.checked) {
        text.style.display = "block";
        text2.style.display = "none";
        checkBox2.checked = false;
        return;
    }
    if (element === checkBox2 && checkBox2.checked) {
        text2.style.display = "block";
        text.style.display = "none";
        checkBox.checked = false;
        return;
    }
    text.style.display = "none";
    text2.style.display = "none";
}


0 commentaires

0
votes

Vous ne savez pas pourquoi vous utiliseriez la case à cocher si une seule option était sélectionnée, puis-je suggérer d'utiliser des entrées radio à la place?

HTML

const form = document.getElementById('example-form');
const inputs = form.getElementsByTagName('input');
const texts = document.getElementsByClassName('text');

for(let i = 0; i < inputs.length; i++) {
  inputs[i].addEventListener('change', function(evt) {
    toggleText(evt.target.value);
  })
}

function toggleText(tar) {
  for(let t = 0; t < texts.length; t++) {
    document.getElementsByClassName('text')[t].classList.add('hidden');
  }
  document.getElementById(`text--${tar}`).classList.remove('hidden')
}

Javascript

<form name="example-form" id="example-form">

  <div id="radio-buttons">
    <input type="radio" id="male" name="gender" value="male">
    <label for="male">Male</label>
    <input type="radio" id="female" name="gender" value="female">
    <label for="female">Female</label>
  </div>
  
  <div id="wrapper">
    <p id="text--male" class="text hidden">Selected male</p>
    <p id="text--female" class="text hidden">Selected female</p>
  </div>
  
</form>


0 commentaires

0
votes

Je voulais juste montrer une autre façon simple de faire cela. Puisque vous avez myCheck1 associés à text et myCheck2 associé à text2 , j'ai décidé de renommer le text de l » id text1 . De cette façon, au lieu de faire de nombreux appels if / elseif / else, je peux contrôler plus facilement l'élément associé avec element.id.replace('myCheck', 'text') , etc.

Jetez un œil, beaucoup plus simple:

<p>Display some text when the checkbox is checked:</p>
<label for="myCheck">Checkbox:</label>
<input type="checkbox" id="myCheck1" onclick="myFunction(this)">
<input type="checkbox" id="myCheck2" onclick="myFunction(this)">
<p id="text1" style="display:none">Checkbox is CHECKED! for male</p>
<p id="text2" style="display:none">Checkbox is CHECKED! for female</p>
function myFunction(element) {
    document.getElementById("text1").style.display = "none";
    document.getElementById("text2").style.display = "none";

    if(element.checked != true) {
         return true;
    }

    document.getElementById("myCheck1").checked = false;
    document.getElementById("myCheck2").checked = false;

    document.getElementById(element.id).checked = true;
    document.getElementById(element.id.replace("myCheck", "text")).style.display = "block";
}

Cela rendra très facile l'ajout d'une troisième option: pour d' other , par exemple, ce qui rendrait l'exemple ci-dessus plus inclusif.


0 commentaires