2011-03-23 82 views
0

我在想这里是否有人可以帮助解决这个问题我在分配一个var值为1的复选框,如果没有在每个jQuery的循环中检查0。查询是否在每个循环中检查复选框是否在jQuery中检查

我有一个HTML列表看起来像这样:

<ul id="role-list"> 

<li id="role_1"> 
<p>Read<input type="checkbox" class="read"> Write<input type="checkbox" class="write"></p> 
</li> 

<li id="role_4"> 
<p>Read<input type="checkbox" class="read"> Write<input type="checkbox" class="write"></p> 
</li> 

<li id="role_5"> 
<p>Read<input type="checkbox" class="read"> Write<input type="checkbox" class="write"></p> 
</li> 

</ul> 

我尝试使用下面的代码来创建jQuery的多维数组:

var roles = {}; 
    $('#role-list li').each(function() { 

    var role_id = jQuery(this).attr('id').replace('role_', ''); 

    roles[role_id] = {}; 
    $('input[type=checkbox]').each(function() { 

    roles[role_id][jQuery(this).attr('class')] = $(this).checked ? 1 : 0; 

}); 

}); 
    alert(JSON.stringify(roles)); 

这是我得到的输出这是相同的是否任何复选框被检查与否:

{"1":{"read":0,"write":0},"4":{"read":0,"write":0},"5":{"read":0,"write":0}} 

问题我是GE特丁是代码:

$(this).checked ? 1 : 0; 

似乎不能正常工作。我曾尝试过多种变化以在发布之前尝试使用此工作,但我仍然没有运气。

任何帮助,将不胜感激。

感谢

.............

我最终决定删除每个循环的复选框,并使用下面的代码工作正常:

var roles = {}; 
    $('#role-list li').each(function() { 

    var role_id = jQuery(this).attr('id').replace('role_', ''); 

    roles[role_id] = {}; 

    roles[role_id]['read'] = jQuery(this).find('.read').is(':checked') ? 1 : 0; 

    roles[role_id]['write'] = jQuery(this).find('.write').is(':checked') ? 1 : 0 

}); 
+0

为什么使用对象字面值var'roles = {}'而不是数组'var roles = []'? – 2011-03-23 18:00:28

+0

你得到了什么输出? – Belinda 2011-03-23 18:02:37

+0

@Belinda - 我已经更新了问题以显示我得到的输出。谢谢 – 2011-03-23 18:17:21

回答

1

你想

$(this).is(':checked') 
-or- 
$(this).attr('checked') 
-or- 
this.checked 

或更改您的查询:

$('input[type=checkbox]:checked') 

在这种情况下,你不需要三元可言,这可能是更好的选择,因为你不能用零填充的角色(你可能想?)

$(this).checked不存在因为$(this)是一个jQuery对象,而.checked是个别元素的属性。

+0

我已经删除了代码'$(this).checked? 1:0',并尝试了所有三种建议,但仍无法使其工作。我也更新了问题以显示我得到的输出。谢谢 – 2011-03-23 18:20:36

+0

这个,愚蠢的问题,但你确定他们中的任何一个被检查? :)':checked'工作,是使用jQuery的正确方法。这是其中一个“如果它不工作,其他东西坏了”时间......我真的不知道该说什么...... $('input [type = checkbox]:checked')的结果是什么? .length'? – 2011-03-23 18:23:29

+0

感谢您的帮助。我花了很多年试图弄清楚代码有什么问题......最终我决定删除复选框的每个循环,所以我已经添加了我的更新代码,上面选择的方法是选中的 – 2011-03-23 20:05:34

相关问题