比较数组,然后根据结果采取行动

时间:2015-06-04 19:08:51

标签: jquery arrays checkbox compare

我有一个表单,我正在使用一堆复选框。在加载文档之前,通过php检查一些复选框。我试图确定用户是否检查了一个尚未从php脚本中检查过的复选框。

如果他们选中了一个未选中的复选框,我想显示一个包含textarea的div,他们可以在其中添加其他详细信息。

到目前为止,我认为最好的方向是将所有复选框的值和状态存储到数组中。 checked的状态存储为1,unchecked的状态存储为0。

每次单击一个复选框时,都会创建一个包含所有复选框的值和状态的新数组。然后将其与原始数组进行比较。如果在比较期间识别出新的已选中复选框,则显示包含textarea的div。

我想知道是否有人知道如何做这样的事情,或者有更好的方法来完成我想做的事情?

HTML:

<label><input type='checkbox' class='supress' name='suppressList[]' value='background' /></label>
<label><input type='checkbox' checked='checked' class='supress' name='suppressList[]' value='refsComp' /></label>
<label><input type='checkbox' class='supress' name='suppressList[]' value='I9' /></label>
<textarea id='details' name='additionalDetails'></textarea>

jQuery的:

var status = $('input[type="checkbox"]').filter('.supress').map(function(){
var value = $(this).attr('value'); 
if($(this).is(':checked'))
     return { 'value':value, 'status' : 1}; 
else
    return { 'value':value, 'status' : 0};

});

2 个答案:

答案 0 :(得分:0)

我认为只要你不弄乱被检查的属性,你可以依赖它只存在于默认属性的事实。因此$('[checked]:checked')将为您提供仍然经过检查的默认设置,$(':not([checked]):checked')将为您提供未经检查的默认值。

http://jsfiddle.net/hxo9xg9o/

答案 1 :(得分:0)

一种简单的方法是为所有复选框提供类,并且需要更改事件

$(document).ready(function(){
$('.checkbox').change(function(event) {
    if ($(this).is(":checked")) {
         $(this).closest('tr').addClass('selected');
    }
    else {
         $(this).closest('tr').removeClass('selected');
    }
});    

});

请在小提琴中找到样本http://jsfiddle.net/8gzn7ryh/