jQuery 复选框选中状态已更改事件
2022-08-29 22:32:44
我希望事件在选中/取消选中复选框时触发客户端:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
基本上,我希望它发生在页面上的每个复选框上。这种在单击时触发并检查状态的方法是否正常?
我想一定有一个更干净的jQuery方式。有人知道解决方案吗?
我希望事件在选中/取消选中复选框时触发客户端:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
基本上,我希望它发生在页面上的每个复选框上。这种在单击时触发并检查状态的方法是否正常?
我想一定有一个更干净的jQuery方式。有人知道解决方案吗?
绑定到事件而不是 。但是,您可能仍然需要检查是否选中了该复选框:change
click
$(".checkbox").change(function() {
if(this.checked) {
//Do stuff
}
});
与在注释中编辑单击
事件相比,绑定到更改
事件的主要好处是,并非所有对复选框的单击都会导致其更改状态。如果只想捕获导致复选框更改状态的事件,则需要恰当地命名的更改
事件。
另请注意,我没有使用jQuery对象中的元素包装,而是使用jQuery方法,这仅仅是因为直接访问DOM元素的属性更短,更快。this.checked
编辑(查看评论)
要获取所有复选框,您有几个选项。您可以使用 :复选框
伪选择器:
$(":checkbox")
或者,您可以使用属性等于选择器:
$("input[type='checkbox']")
为了将来参考这里遇到的任何人,如果您要动态添加复选框,则上面正确接受的答案将不起作用。您需要利用事件委托,它允许父节点从特定后代捕获气泡事件并发出回调。
// $(<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>