2013-08-22 39 views
0

我有多个复选框,并希望为他们获得一个整体值。jQuery - 检查复选框值(链接jQuery函数如果声明)

例如,如果选中一个,则值为真/被选中。

如果没有选中,则选择false/unchecked。

我的HTML是:

<input id="one" type="checkbox"> 
<input id="two" type="checkbox"> 
<input id="three" type="checkbox"> 
<input id="four" type="checkbox"> 
<button onclick="check();">Is checked (jQuery Chained)</button> 
<button onclick="check2();">Is checked(Big If Statement)</button> 

我的JavaScript/jQuery是:

function check() { 
    var booleee = $('#one,#two,#three,#four').attr('checked'); 
    alert("Checked: " + booleee); 
} 

function check2() { 
    if ($('#one').attr('checked') || $('#two').attr('checked') || $('#three').attr('checked') || $('#four').attr('checked')) { 
     alert("Checked: true"); 
    } 
    alert("Checked: false"); 
} 

的js小提琴:Click Here

请注意,我已经解决了这个问题。这个问题更多的是帮助我理解为什么我的checked2()函数能够正常工作,而我的check()不能。

回答

2

var booleee = $('#one,#two,#three,#four').attr('checked');仅检查是否选中了第一个(本例中为#one)复选框。

doc for attr

找该组中的 匹配元素的第一个元素的属性的值。

应该

var booleee = $('#one,#two,#three,#four').filter(':checked').length > 0; 

而且在新版本(> 1.6),你需要使用属性 '检查'(.prop('checked')),而不是在替代attr你有这么:checked filter​​。

0
在HTML组检查物业

<input id="one" type="checkbox" checked="checked"> 
<input id="two" type="checkbox" checked="checked"> 
<input id="three" type="checkbox" checked="checked"> 
<input id="four" type="checkbox" checked="checked"> 

你没有定义选中状态,以便它表明不确定,因为它不能读取此属性,当你调用第二功能,那么只假进来警报,因为他们的复选框选中属性找不到

看到demo

1

因为它没有检查在selector所有元素。

,使其工作

function check() { 
    var booleee =$("input:checkbox:checked").length > 0; 
    alert("Checked: " + booleee); 
} 

到更具体的选择添加表单ID在selector

DEMO

1

更好的方法:http://jsfiddle.net/arvind07/ZP78F/

function check() { 
    var checks = $('input:checkbox'); 
    var checked = 0; 
    checks.each(function() { 
     if ($(this).is(":checked")) { 
      checked = 1; 
      return false; 
     } 
    }); 
    if (checked) { 
     alert("Checked"); 
    } else { 
     alert("Not checked"); 
    } 
} 
0
var checked = $(':checkbox:checked').length > 0;