JQuery CheckBox Checked State Changed Event

Ik wil een evenement om de clientzijde aan te vuren wanneer een selectievakje wordt gecontroleerd / niet gecontroleerd:

$('.checkbox').click(function() {
  if ($(this).is(':checked')) {
    // Do stuff
  }
});

In principe wil ik het gebeuren voor elk selectievakje op de pagina. Is deze methode om op de klik te schieten en de staat te controleren OK?

Ik denk dat er een schonere jQuery-manier moet zijn. Iedereen weet een oplossing?


Antwoord 1, Autoriteit 100%

Bind aan de changeEvenement in plaats van click. U moet echter waarschijnlijk nog steeds controleren of het selectievakje is aangevinkt:

$(".checkbox").change(function() {
    if(this.checked) {
        //Do stuff
    }
});

Het belangrijkste voordeel van binding aan de changeEvenement over de clickEvenement is dat niet alle klikken op een selectievakje ervoor zorgen dat het de staat zal veranderen. Als u alleen gebeurtenissen wilt vastleggen die ervoor zorgen dat het selectievakje het selectievakje wijzigen, wilt u de toepasselijke naam changeevenement. Redacted in reacties

Houd er ook rekening mee dat ik this.checkedheb gebruikt in plaats van het element in een jQuery-object in te wikkelen en met behulp van jQuery-methoden, simpelweg omdat het korter en sneller is om rechtstreeks toegang te krijgen tot het eigendom van het DOM-element.

bewerken (zie opmerkingen)

Om alle selectievakjes te krijgen, hebt u een aantal opties. U kunt de :checkboxpseudo-selector:

$(":checkbox")

Of u kunt een kenmerk is gelijk aanselector gebruiken:

$("input[type='checkbox']")

Antwoord 2, autoriteit 9%

Voor toekomstige referentie voor iedereen hier die problemen heeft, als u de selectievakjes dynamisch toevoegt, zal het juiste geaccepteerde antwoordhierboven werkt niet. U moet gebruikmaken van gebeurtenisdelegatiewaarmee een bovenliggend knooppunt bubbelgebeurtenissen kan vastleggen van een specifieke afstammeling en geef een terugbelverzoek.

// $(<parent>).on('<event>', '<child>', callback);
$(document).on('change', '.checkbox', function() {
    if(this.checked) {
      // checkbox is checked
    }
});

Merk op dat het bijna altijd niet nodig is om documentte gebruiken voor de bovenliggende selector. Kies in plaats daarvan een specifieker bovenliggend knooppunt om te voorkomen dat de gebeurtenis naar te veel niveaus wordt verspreid.

Het onderstaande voorbeeld laat zien hoe de gebeurtenissen van dynamisch toegevoegde dom-knooppunten geen eerder gedefinieerde luisteraars triggeren.

$postList = $('#post-list');
$postList.find('h1').on('click', onH1Clicked);
function onH1Clicked() {
  alert($(this).text());
}
// simulate added content
var title = 2;
function generateRandomArticle(title) {
  $postList.append('<article class="post"><h1>Title ' + title + '</h1></article>');
}
setTimeout(generateRandomArticle.bind(null, ++title), 1000);
setTimeout(generateRandomArticle.bind(null, ++title), 5000);
setTimeout(generateRandomArticle.bind(null, ++title), 10000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section id="post-list" class="list post-list">
  <article class="post">
    <h1>Title 1</h1>
  </article>
  <article class="post">
    <h1>Title 2</h1>
  </article>
</section>

Antwoord 3, autoriteit 2%

Gewoon een andere oplossing

$('.checkbox_class').on('change', function(){ // on change of state
   if(this.checked) // if changed state is "CHECKED"
    {
        // do the magic here
    }
})

Antwoord 4

Als het je bedoeling is om een gebeurtenis alleen toe te voegen aan aangevinkte selectievakjes (zodat het zou worden geactiveerd als ze worden uitgeschakeld en later opnieuw worden aangevinkt), dan is dit wat je wilt.

$(function() {
    $("input[type='checkbox']:checked").change(function() {
    })
})

als het uw bedoeling is om een evenement toe te voegen aan alle selectievakjes (aangevinkt en niet aangevinkt)

$(function() {
    $("input[type='checkbox']").change(function() {
    })
})

als je wilt dat het alleen wordt geactiveerd wanneer ze worden aangevinkt (van niet aangevinkt), antwoord dan @James Allardice hierboven.

BTW input[type='checkbox']:checkedis CSS-kiezer.


Antwoord 5

$(document).ready(function () {
    $(document).on('change', 'input[Id="chkproperty"]', function (e) {
        alert($(this).val());
    });
});

Antwoord 6

Dit is de oplossing om te vinden is het selectievakje is gecontroleerd of niet.
Gebruik de functie #PROP () //

$("#c_checkbox").on('change', function () {
                    if ($(this).prop('checked')) {
                        // do stuff//
                    }
                });

Antwoord 7

is heel eenvoudig, dit is de manier waarop ik gebruik:

jQuery:

$(document).on('change', '[name="nameOfCheckboxes[]"]', function() {
    var checkbox = $(this), // Selected or current checkbox
        value = checkbox.val(); // Value of checkbox
    if (checkbox.is(':checked'))
    {
        console.log('checked');
    }else
    {
        console.log('not checked');
    }
});

Regards!


Antwoord 8

Actie op basis van een gebeurtenis (op klik-gebeurtenis).

$('#my_checkbox').on('click',function(){
   $('#my_div').hide();
   if(this.checked){
     $('#my_div').show();
   }
});

Zonder evenement actie ondernemen op basis van de huidige staat.

$('#my_div').hide();
if($('#my_checkbox').is(':checked')){
  $('#my_div').show();
}

Antwoord 9

Misschien is dit misschien een alternatief voor u.

<input name="chkproperty" onchange="($(this).prop('checked') ? $(this).val(true) : $(this).val(false))" type="checkbox" value="true" />`

Antwoord 10

Probeer deze jQuery-validatie

$(document).ready(function() {
  $('#myform').validate({ // initialize the plugin
    rules: {
      agree: {
        required: true
      }
    },
    submitHandler: function(form) {
      alert('valid form submitted');
      return false;
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>
<form id="myform" action="" method="post">
  <div class="buttons">
    <div class="pull-right">
      <input type="checkbox" name="agree" /><br/>
      <label>I have read and agree to the <a href="https://stackexchange.com/legal/terms-of-service">Terms of services</a> </label>
    </div>
  </div>
  <button type="submit">Agree</button>
</form>

Antwoord 11

Probeer deze “html-aanpak” die acceptabel is voor kleine JS-projecten

function msg(animal,is) {
  console.log(animal, is.checked);   // Do stuff
}
<input type="checkbox" oninput="msg('dog', this)" />Do you have a dog? <br>
<input type="checkbox" oninput="msg('frog',this)" />Do you have a frog?<br>
...

Antwoord 12

Het kan ook worden bereikt zoals hieronder. Wanneer het selectievakje is afgevuurd, de div
of bediening met #checkbox-ID is HIDDDEN of wordt anders weergegeven.

<script>
      $('#checkbox').on('click',function(){
          if(this.checked){
              $('#checkbox').hide();
           }else{
              $('#checkbox').show();
           }
      });
 </script>

Other episodes