获取选中的项目,数组为空

时间:2013-05-31 11:38:46

标签: jquery

我正在尝试使用

获取所有选中复选框的ID
$(document).ready(function(){
$("#thechecked").click(function(){
    var closestTr = $(':checkbox:checked').closest('tr').attr('id');

    var arr = $.map($(closestTr), function(e, i) {
        return +e.value;
    });
   alert(arr.join(','));
});
});

示例http://jsfiddle.net/3HS8P/1/返回一个空数组

为什么返回一个空数组?

4 个答案:

答案 0 :(得分:4)

attr('id')只返回第一个元素的id,而不是全部。您可以直接映射集合。

$("#thechecked").click(function () {
    var arr = $(':checkbox:checked').closest('tr').map(function(i, e) {
        return +e.id;
    }).get();
    alert(arr.join(','));
});

http://jsfiddle.net/3HS8P/2

在jQuery对象上执行.map将返回一个jQuery对象,因此您还需要.get()来获取实际数组,以便能够.join()其元素。< / p>

正如@Alnitak在下面的评论中指出的那样,CSS不允许使用以数字开头的样式id(虽然它可能有效,但规范不允许)。我建议使用data-id="1"代替id="1",然后使用$(el).data("id")访问它。

答案 1 :(得分:1)

$(document).ready(function(){
    $("#thechecked").click(function() {
        var closestTr = $('input:checkbox:checked').closest('tr');
        var arr = closestTr.map(function(i, e) {
            return e.id;
        }).get();
       alert(arr.join(','));
    });
});

Example

答案 2 :(得分:0)

您的行结尾.attr('id')返回一个字符串,而不是一组元素,因此您无法将其与$.map一起使用。试试这个通用示例,它将返回jQuery对象$el中每个元素的所有ID:

var ids = $el.map(function(_, el) {
    return el.id;
}).get();

在您的情况下,根据原始代码自下而上:

var $el = $(':checked').closest('tr');

或者可选地(并且可能不是非常有效)自上而下工作:

var $el = $('tr').has(':checked');

答案 3 :(得分:0)

请查看http://jsfiddle.net/3HS8P/5/

这将提醒检查复选框的行ID。

$("#thechecked").click(function(){
    var all_ids = []
    var id = "";
    $.each($('input[type=checkbox]'),function(){
        var checked = $(this).is(':checked')
        if (checked){
            id = $(this).closest('tr').attr('id')
            all_ids.push(id)
        } 
    });
    alert(all_ids)
});