[javascript]-Détecter les changements des checkbox

-Détecter les changements des checkbox [javascript] - Javascript/Node.js - Programmation

Marsh Posté le 20-12-2019 à 13:44:53    

Bonjour,
 
J'ai un tableau avec une checkbox pour chaque ligne.
Lorsqu'un utilisateur clique dessus j'active ou désactive des fonctionnalités en ajax, pas de souci.
 
Je souhaite faire une checkbox supplémentaire qui coche ou décoche toutes les cases en même temps, et qui donc déclenche aussi mon autre fonction pour activer/désactiver les fonctionnalités... Et c'est là que ça coince.
Ma checkbox général a bien un effet sur toutes les autres, mais la fonction qui devrait être lancée au moment du changement d'état de chacune ne se lance pas.
 
Voici mon code:
 
Fonction lancée lors d'un clic sur le checkbox générale:
 

Code :
  1. $(document).on('click', 'input[name="check_all"]', function(e) {
  2.                 if($(this).is(':checked')) {
  3.                     $('input[name="actif"]').prop('checked', true);
  4.                 } else {
  5.                     $('input[name="actif"]').prop('checked', false);
  6.                 }
  7.             });


 
Fonction lancée lors d'un clic sur une checkbox simple (et qui donc devrait être lancée lors du clic sur la générale):

Code :
  1. $(document).on('change', 'input[name="actif"]', function(e) {
  2.                 $.ajax({
  3.                     url : 'L_URL',
  4.                     type : 'POST',
  5.                     data : {mes_donnees},
  6.                     dataType : 'html',
  7.                     success : function(html) {
  8.                         // Succès: Aucun retour
  9.                     },
  10.                     error : function(resultat){
  11.                         alert('Erreur : ' + resultat)
  12.                     }
  13.                 });


 
La seconde fonction fonctionne donc très bien lors d'un clic sur une checkbox seule, mais n'est pas activée lors d'un clic sur la générale (mais l'état des checkbox à l'écran change bien lui).
 
Par avance, merci pour votre aide.

Reply

Marsh Posté le 20-12-2019 à 13:44:53   

Reply

Marsh Posté le 20-12-2019 à 14:41:11    

trigger('change') https://api.jquery.com/trigger/ ?

Code :
  1. $(document).on('click', 'input[name="check_all"]', function(e) {
  2. if($(this).is(':checked')) {
  3.  $('input[name="actif"]').attr('checked', true).trigger('change');
  4. } else {
  5.  $('input[name="actif"]').attr('checked', false).trigger('change');
  6. }
  7. });


https://jsfiddle.net/etwhpbyf/
 
Par contre si on prend mon code html et ta logique de on change : ça déclenchera 3 appel AJAX, que l'on coche ou que l'on décoche, c'est pas top niveau optimisation des ressources... ^^


---------------
D3
Reply

Marsh Posté le 20-12-2019 à 15:03:15    

Merci beaucoup, je viens de tester et ça fonctionne parfaitement.
 
J'ai juste ajouté un petit truc à ton code pour que le "change" ne se fasse que sur les éléments dont la coche change réellement (sinon c'est lancé aussi pour ceux qui étaient déjà cochés:
 
$('input[name="actif"]:not(:checked)').prop('checked', true).trigger('change');
 
Encore merci! :)
Je verrai pour optimiser ça en mettant par exemple les ID à changer dans un tableau, puis ne lancer la fonction ajax une seule fois avec ça.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed