jQuerycheckbox选中状态更改事件
当checkbox被选中/取消选中时,我想要一个事件触发客户端:
$('.checkbox').click(function() { if ($(this).is(':checked')) { // Do stuff } });
基本上我希望它发生在页面上的每个checkbox。 这种点击并检查状态的方法是否正确?
我在想,必须有一个更清洁的jQuery方式。 任何人都知道解决scheme
绑定到change
事件,而不是click
。 但是,您可能仍然需要检查checkbox是否被选中:
$(".checkbox").change(function() { if(this.checked) { //Do stuff } });
通过 click
事件绑定到change
事件的主要好处是,不是所有点击checkbox都会导致它改变状态。如果您只想捕获导致checkbox更改状态的事件,则需要命名适当的 编辑评论 change
事件。
另外请注意,我已经使用this.checked
而不是将元素包装在jQuery对象中,并使用jQuery方法,因为它直接访问DOM元素的属性更短,更快。
编辑 (请参阅评论)
要获得所有checkbox,您有几个选项。 您可以使用:checkbox
伪select器:
$(":checkbox")
或者你可以使用一个属性等于select器:
$("input[type='checkbox']")
为了将来有任何人在这里遇到困难,如果你是dynamic添加checkbox,上面的正确答案将不起作用。 您需要利用事件委托 ,允许父节点捕获来自特定后代的冒泡事件并发出callback。
// $(<parent>).on('<event>', '<child>', callback); $(document).on('change', '.checkbox', function() { if(this.checked) { // checkbox is checked } });
请注意,对于父select器使用document
几乎总是不必要的。 相反,select一个更具体的父节点来防止事件传播太多级别。
以下示例显示dynamic添加的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>
另一个解决scheme
$('.checkbox_class').on('change', function(){ // on change of state if(this.checked) // if changed state is "CHECKED" { // do the magic here } })
如果你的意图是只附加事件选中checkbox(所以它会触发,当他们没有选中,并再次检查),那么这就是你想要的。
$(function() { $("input[type='checkbox']:checked").change(function() { }) })
如果您的意图是将事件附加到所有checkbox(选中和未选中)
$(function() { $("input[type='checkbox']").change(function() { }) })
如果你想让它只在被检查的时候触发(从未选中),@James Allardice回答上面的问题。
BTW input[type='checkbox']:checked
是CSSselect器。
也许这可能是你的另一种select。
<input name="chkproperty" onchange="($(this).prop('checked') ? $(this).val(true) : $(this).val(false))" type="checkbox" value="true" />`
$(document).ready(function () { $(document).on('change', 'input[Id="chkproperty"]', function (e) { alert($(this).val()); }); });