À l'avenir, si vous rencontrez des difficultés, sachez que si vous ajoutez les cases à cocher de manière dynamique, la bonne méthode est la suivante réponse acceptée ci-dessus ne fonctionnera pas. Vous devrez tirer parti de délégation d'événements qui permet à un nœud parent de capturer les événements à bulles d'un descendant spécifique et d'émettre un rappel.
// $(<parent>).on('<event>', '<child>', callback);
$(document).on('change', '.checkbox', function() {
if(this.checked) {
// checkbox is checked
}
});
Notez qu'il est presque toujours inutile d'utiliser document
pour le sélecteur parent. Choisissez plutôt un nœud parent plus spécifique pour éviter de propager l'événement à trop de niveaux.
L'exemple ci-dessous montre comment les événements des nœuds de dom ajoutés dynamiquement ne déclenchent pas les listeners définis précédemment.
$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>
Alors que cet exemple montre l'utilisation de la délégation d'événements pour capturer des événements pour un nœud spécifique ( h1
dans ce cas), et émettre un rappel pour de tels événements.
$postList = $('#post-list');
$postList.on('click', 'h1', 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>