复选框上的jquery javascript .prop(“checked”)返回undefined for checked复选框

时间:2013-06-20 14:12:30

标签: jquery checkbox

开始我使用prop(“checked”)代替attr(“checked”),因为好像我理解它,使用prop检索wether te复选框是否被检查,并且attr只告诉你是否设置了html属性(就像在初始的html代码中一样)。

现在我有两个用php编写的复选框:

echo '<h4>Special</h4>';
$specials=array('Is Home Page', 'Does not appear in navigation');
for($i=0;$i<count($specials);++$i){
if($specials[$i]!=''){
    echo '<input type="checkbox" name="special[',$i,']"';
    if($page['special']&pow(2,$i))
        echo ' checked="checked"';
    echo ' />',$specials[$i],'<br />';
}
}

结果是元素:

<input type=​"checkbox" name=​"special[0]​"/>​
<input type=​"checkbox" name=​"special[1]​"/>​

当我选中其中一个复选框时,我想检索要发送到服务器的值,但这似乎不起作用:

var $home = $("#tabs-advanced-options input[name='special[0]']");
//if($home.is(":checked")){ // always returns false
if($home.prop("checked")){  // always returns undefined
 special["0"] = "Home";
}
var $hidden = $("#tabs-advanced-options input[name='special[1]']");
//if($hidden.is(":checked")){ // always returns false
if($hidden.prop("checked")){ // always returns undefined
 special["1"] = "isHidden";
}

正如代码注释中指出的那样,prop(“checked”)始终返回undefined。 我现在检查复选框... 我也尝试过is(“:checked”),但总是返回false。 每次只选择一个dom元素(我知道.prop()仅适用于集合中的第一个)

感谢任何想法!

选择器是正确的,因为我在控制台中测试它并返回正确的结果(有和没有反斜杠 - :

$("#tabs-advanced-options input[name='special\\[1\\]']")
<input type=​"checkbox" name=​"special[1]​">​

$("#tabs-advanced-options input[name='special\\[0\\]']")
<input type=​"checkbox" name=​"special[0]​">​

$("#tabs-advanced-options input[name='special[1]']")
<input type=​"checkbox" name=​"special[1]​">​

$("#tabs-advanced-options input[name='special[0]']")
<input type=​"checkbox" name=​"special[0]​">​

我使用过jQuery版本

我正在使用jquery 1.9.0:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

问候!

1 个答案:

答案 0 :(得分:4)

根据JQuery documention你必须逃避方括号。

var $home = $("#tabs-advanced-options input[name='special\\[0\\]']");
//if($home.is(":checked")){ // always returns false
if($home.prop("checked")){  // always returns undefined
     special["0"] = "Home";
}
var $hidden = $("#tabs-advanced-options input[name='special\\[1\\]']");
//if($hidden.is(":checked")){ // always returns false
if($hidden.prop("checked")){ // always returns undefined
    special["1"] = "isHidden";
}