2011-09-02 114 views
0

我有一个复选框列表。点击每个复选框后,我将该值添加到隐藏变量中。但问题是如果我想在取消选中复选框时从列表中删除值。如何这块驾驶室进行从列表中删除值

这里隐藏的表单变量

<input name="IDList[]" type="hidden" id="IDList" value="" /> 

和jQuery的

$(".myCheckboxClass").change(function() { 
    var output = 0; 
    $(".myCheckboxClass").change(function() { 
     if ($(this).is(":checked")) { 
      output += ", " + $(this).val(); 
     } else { 
      output = $.grep(output, function(value) { 
       return value != $(this).val(); 
      }); 
     } 
     $("#IDList").val(output); 
    }); 
}); 
+0

你如何存储v值?在一个对象? – wesbos

+2

你可以添加你使用的代码吗? – JAiro

+0

这里是隐藏表单变量 erik

回答

2

事情是这样的:(演示)http://jsfiddle.net/wesbos/5N2kb/1/

我们使用一种称为对象vals来存储信息。添加和删​​除,因为我们检查/取消选中。

var vals = {}; 

$('input[type=checkbox]').click(function() { 
    var that = $(this); 
    if (that.is(':checked')) { 
     console.log(this.name); 
     vals[this.name] = "In your Object"; 
    } 
    else { 
     delete vals[this.name]; 
    } 
    console.log(vals); 

}); 
+0

这个似乎并不工作 – erik

+0

是的,检查示例 – wesbos

+0

如果我愚蠢的链接代码什么也不做。没有得到输出 – erik

0

按照你的逻辑,你可以这样做:

$('#IDList').data('value', []); 

$(".myCheckboxClass").change(function() { 
    var list = $('#IDList').data('value'); 

    if ($(this).is(":checked")) { 
     list.push($(this).val()); 
    } else { 
     var indexToRemove = list.indexOf($(this).val()); 
     list.splice(indexToRemove, 1); 
    } 
    $('#IDList').val(list); 
}); 

但是如果你只关心#IDList对数据的提交或其他操作的价值,你可能要考虑一种替代方法:整理当你需要它们时检查值。

$('#form').submit(function() { 
    var list = $('input.myCheckboxClass:checked', this).map(function() { 
     return $(this).val(); 
    }).get(); 

    $('#IDList').val(list); 
}); 

参见上述两个行动:http://jsfiddle.net/william/F6gVg/1/