当一个复选框被选中/取消选中时,我想要一个事件来触发客户端:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
基本上,我希望它发生在页面上的每个复选框上。这种点击并检查状态的方法是否正确?
我在想一定有一个更干净的jQuery方式。有人知道解决办法吗?
当一个复选框被选中/取消选中时,我想要一个事件来触发客户端:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
基本上,我希望它发生在页面上的每个复选框上。这种点击并检查状态的方法是否正确?
我在想一定有一个更干净的jQuery方式。有人知道解决办法吗?
当前回答
如果您动态添加复选框,上面正确的可接受答案将不起作用,以供将来在这里遇到困难的人参考。您将需要利用事件委托,它允许父节点从特定的后代捕获冒泡事件并发出回调。
// $(<parent>).on('<event>', '<child>', callback);
$(document).on('change', '.checkbox', function() {
if(this.checked) {
// checkbox is checked
}
});
注意,对于父选择器,几乎总是没有必要使用document。相反,选择一个更特定的父节点,以防止将事件传播到太多的级别。
下面的示例显示动态添加的dom节点的事件如何不触发先前定义的侦听器。
$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>
此示例显示了事件委托的用法,以捕获特定节点(本例中为h1)的事件,并为此类事件发出回调。
$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>
其他回答
关键是:使用prop而不是attr来查询已检查的状态,例如:
jQuery('#my_check_tag').prop('checked') //返回正确的状态 jQuery('#my_check_tag').attr('checked') //总是返回undefined
它还可以通过以下方式实现。当复选框被触发时,div 或带有#checkbox id的控件被隐藏或以其他方式显示。
<script>
$('#checkbox').on('click',function(){
if(this.checked){
$('#checkbox').hide();
}else{
$('#checkbox').show();
}
});
</script>
绑定到更改事件,而不是单击。然而,你可能仍然需要检查复选框是否被选中:
$(".checkbox").change(function() {
if(this.checked) {
//Do stuff
}
});
与单击事件相比,绑定到更改事件的主要好处是,并不是所有对复选框的单击都会导致它改变状态。如果您只想捕获导致复选框更改状态的事件,则需要名称恰当的更改事件。在评论中编辑
还要注意,我使用了这个。而不是将元素包装在jQuery对象中并使用jQuery方法,因为直接访问DOM元素的属性更短、更快。
编辑(见评论)
要获得所有复选框,您有两个选项。你可以使用:复选框伪选择器:
$(":checkbox")
或者你可以使用属性=选择器:
$("input[type='checkbox']")
只是另一种解决方案
$('.checkbox_class').on('change', function(){ // on change of state
if(this.checked) // if changed state is "CHECKED"
{
// do the magic here
}
})
很简单,这是我使用的方法:
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');
}
});
的问候!