1
votes

L'affichage des cases à cocher sélectionnées ne fonctionne pas en javascript

Je souhaite afficher les noms des cases à cocher sélectionnées lorsque je clique sur Soumettre.

Par exemple:

  • Si aucune case n'est cochée, l'affichage doit être "Veuillez sélectionner un passe-temps".
  • Si la peinture est cochée, afficher "#painting"
  • Si la case peinture et lecture est cochée, affichez "# reading # painting"

Le code ci-dessous ne fonctionne pas.

<form name= "myform" onclick="displayHobbies()">

Hobby <input type="checkbox" id="dancing" name="dancing">
  	  <label for="dancing">Dancing</label>
      <input type="checkbox" id="reading" name="reading">
  	  <label for="reading">Reading</label>
  	  <input type="checkbox" id="painting" name="painting">      
  	  <label for="painting">Painting</label>
<button type="button" id="hobby_submit">Submit</button>
</form>
Hobbies:<label id="hobbies_display"></label>
function displayHobbies(){
let HobbiesInput=[document.getElementById('dancing'),
document.getElementById('reading'),
document.getElementById('painting')];
var HobbiesError="";
for(var i=0;i<HobbiesInput.length;i++)
{
	if (HobbiesInput[i].checked==false)
	{
            HobbiesError="Please select a hobby";
	}	
	else
	{
	    HobbiesError +="#"+HobbiesInput[i].name;
	}
}
document.getElementById('hobbies_display').innerHTML=HobbiesError;
}


4 commentaires

Pourquoi y a-t-il un clic sur la balise de formulaire? Vous ne voulez pas soumettre?


Tout d'abord, vous devez effacer l'étiquette hobbies_display chaque fois que vous cliquez sur quelque chose. Deuxièmement, votre boucle for ne vérifie pas si elles sont toutes non cochées pour afficher ce message, elle vérifie si aucun n'est coché. Donc, si les deux premiers sont cochés, mais que le dernier ne l'est pas, il examinera ce dernier, verra qu'il n'est pas coché, puis définira le message pour dire que rien n'est vérifié.


@epascarello c'est censé être sur clic ... Je ne veux pas soumettre le formulaire


mais c'est n'importe quel clic à l'intérieur du formulaire, sans cliquer sur le bouton. Alors soumettez le formulaire et preventDefault.


4 Réponses :


0
votes

<form name= "myform" onsubmit="displayHobbies(); return false;">

Hobby <input type="checkbox" id="dancing" name="dancing">
  	  <label for="dancing">Dancing</label>
      <input type="checkbox" id="reading" name="reading">
  	  <label for="reading">Reading</label>
  	  <input type="checkbox" id="painting" name="painting">      
  	  <label for="painting">Painting</label>
<button type="submit" id="hobby_submit">Submit</button>
</form>
Hobbies:<label id="hobbies_display"></label>
function displayHobbies() {
let HobbiesInput=[document.getElementById('dancing'),
                  document.getElementById('reading'),
                  document.getElementById('painting')];
var HobbiesError="";

for(var i=0;i<HobbiesInput.length;i++)
{
	if (HobbiesInput[i].checked) {
         HobbiesError +="#"+HobbiesInput[i].name;
	}
}

if (!HobbiesError) {
    HobbiesError="Please select a hobby";
}

document.getElementById('hobbies_display').innerHTML = HobbiesError;
}


0 commentaires

0
votes

Dans votre code, s'il y a une case non cochée, le code ajoutera le message "Veuillez sélectionner un hobby".

À la place, vérifiez cela à la fin, et cela fonctionnera:

<form name="myform" onclick="displayHobbies()">

  Hobby <input type="checkbox" id="dancing" name="dancing">
  <label for="dancing">Dancing</label>
  <input type="checkbox" id="reading" name="reading">
  <label for="reading">Reading</label>
  <input type="checkbox" id="painting" name="painting">
  <label for="painting">Painting</label>
  <button type="button" id="hobby_submit">Submit</button>
</form>
Hobbies:<label id="hobbies_display"></label>
function displayHobbies() {
  let HobbiesInput = [
    document.getElementById('dancing'),
    document.getElementById('reading'),
    document.getElementById('painting')
  ];
  var HobbiesError = "";
  for (var i = 0; i < HobbiesInput.length; i++) {
    if (HobbiesInput[i].checked) {
      HobbiesError += "#" + HobbiesInput[i].name;
    }
  }
  document.getElementById('hobbies_display').innerHTML = HobbiesError || "Please select a hobby";
}


1 commentaires

@MegCullen Vous pouvez accepter une réponse (par la coche), pour aider les autres à trouver de meilleures réponses



0
votes

Voici un extrait de code pour cela. Nous attachons un auditeur à un formulaire (pas à une entrée à chaque). Ensuite, nous regardons si la chose sur laquelle nous avons cliqué est en fait une case à cocher de type d'entrée. Ensuite, s'il est coché , nous poussons sa valeur vers le tableau que nous voulons afficher en haut, si n'est pas coché , nous supprimons de ce tableau. Ensuite, nous sélectionnons un élément dans lequel nous voulons rendre notre liste et le rendre. J'espère que cela aide.

<form id="form">
  <div id="valuesList"></div>
  <div>
    I have a bike
    <input type="checkbox" name="vehicle1" value="Bike">
  </div>
  <div>
    I have a car
    <input type="checkbox" name="vehicle2" value="Car">
  </div>
</form>
let values = [];
const form = document.getElementById('form')
form.addEventListener('click', e => {
  if (!e.target.type === 'checkbox') return;
  const value = e.target.value;
  const checked = e.target.checked;
  if (checked) {
    values.push(value)
  } else {
    const newValues = values.filter(v => v !== value);
    values = newValues;
  }
  const valuesList = document.getElementById('valuesList')
  valuesList.innerHTML = values.map(m => `#${m}`).join('')
})


1 commentaires

Merci pour l'aide!! :)



1
votes

Voici quelque chose d'un peu plus propre:

function displayHobbies() {

  let HobbiesInput = [
      document.getElementById('dancing'),
      document.getElementById('reading'),
      document.getElementById('painting')
  ];

  // flag if no hobby is checked
  var noHobbiesChecked = true;

  // reset display area
  document.getElementById('hobbies_display').innerHTML = "";

  for (var i = 0; i < HobbiesInput.length; i++) {

    if (HobbiesInput[i].checked === true)   {
      // add hobby to display area
      document.getElementById('hobbies_display').innerHTML += "#"+HobbiesInput[i].name;
      // turn off the flag since we have at least one hobby checked
      noHobbiesChecked = false; 
    }

  }

  if (noHobbiesChecked === true) {
    // show error
    document.getElementById('hobbies_display').innerHTML = "Please select a hobby";
  }

}


0 commentaires