当复选框被选中/取消选中时,我希望在客户端触发一个事件:
$('.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
}
});
click
事件相比于绑定到change
事件的主要好处在于,并非所有单击复选框都会导致其更改状态。如果您只想捕获导致复选框更改状态的事件,您需要使用恰当命名的change
事件。请注意,我使用this.checked
而不是将元素包装在jQuery对象中并使用jQuery方法,仅因为直接访问DOM元素的属性更短且更快。
编辑(请参见注释)
要获取所有复选框,您有几个选项。您可以使用:checkbox
伪选择器:
$(":checkbox")
或者你可以使用属性等于选择器:
$("input[type='checkbox']")
$(this).is(':checked')
更加简洁。我原本以为如果要检测来自键盘(如按 tab 键、空格键)的更改,必须使用 change
事件,但令人惊讶的是,click
事件也可以检测到非鼠标点击引起的更改。不确定这是否与 jQuery 有关,参考链接:http://jsfiddle.net/mendesjuan/E39sz/。 - Ruan Mendesclick
、change
等)绑定到页面上的所有复选框可能会导致性能问题(取决于复选框数量)。请尝试将其绑定到父元素或文档,并捕获冒泡事件,例如使用 $('form').on('change', ':checkbox', function(){ //stuff });
。 - hitautodestructif($(this).is(':checked')){
//Do stuff
}
然后它就起作用了。 - Lal// $(<parent>).on('<event>', '<child>', callback);
$(document).on('change', '.checkbox', function() {
if(this.checked) {
// checkbox is checked
}
});
document
作为父选择器。相反,选择更具体的父节点以防止事件传播太多层。$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>
只是另一种解决方案
$('.checkbox_class').on('change', function(){ // on change of state
if(this.checked) // if changed state is "CHECKED"
{
// do the magic here
}
})
如果您的意图是仅在选中复选框时附加事件(因此当它们被取消选中并再次选中时将触发事件),那么这就是您想要的。
$(function() {
$("input[type='checkbox']:checked").change(function() {
})
})
如果您的意图是将事件附加到所有复选框(包括已选和未选)
$(function() {
$("input[type='checkbox']").change(function() {
})
})
如果你希望它只在被选中时触发(从未选中),那么请参考@James Allardice上面的回答。input[type='checkbox']:checked
是CSS选择器。$("input[type='checkbox']:not(:checked)")
。 - Matas Vaitkevicius$(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');
}
});
问候!
$(document).ready(function () {
$(document).on('change', 'input[Id="chkproperty"]', function (e) {
alert($(this).val());
});
});
$("#c_checkbox").on('change', function () {
if ($(this).prop('checked')) {
// do stuff//
}
});
<script>
$('#checkbox').on('click',function(){
if(this.checked){
$('#checkbox').hide();
}else{
$('#checkbox').show();
}
});
</script>
试试这个“html方法”,它适用于小型JS项目,可行
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>
...
$('#my_checkbox').on('click',function(){
$('#my_div').hide();
if(this.checked){
$('#my_div').show();
}
});
$('#my_div').hide();
if($('#my_checkbox').is(':checked')){
$('#my_div').show();
}