如何将已检查的表行添加到数组

时间:2016-11-24 10:23:02

标签: jquery foreach html-table

您好我试图将我的表的第二列的已检查行添加到数组并将其传递给控制器​​参数。

我有复选框,所有选中的行都将提交给controller参数。我需要的列名为“Index”,值为整数。

我的问题是以下代码警告空白。

<script>
    var list = [];
    $(document).ready(function () {
        $('#test').click(function (event) {
            var urls = [];

            $('.table tr').each(function () {
                if ($('.table tr').is(':checked')) {
                    urls.push($(this).find('td').eq(1).text());

                }
                    
                });

                alert(urls);

            });
        
    });
</script>
 @foreach (var item in Model)
            {
                <tr>  
                    <td><input type="checkbox" name="checked" class="idRow"></td>          
                    <td>@Html.DisplayFor(modelItem => item.Id)</td>
                    <td>@Html.DisplayFor(modelItem => item.Index)</td>
                    <td>@Html.DisplayFor(modelItem => item.StartDate)</td>
                    <td>@Html.DisplayFor(modelItem => item.EndDate)</td>
                    <td>@Html.DisplayFor(modelItem => item.Adult)</td>
                    <td>@Html.DisplayFor(modelItem => item.Children)</td>
                    <td>@Html.DisplayFor(modelItem => item.CategoryName)</td>
                    <td>@Html.DisplayFor(modelItem => item.CategorySubName)</td>
                    <td>@Html.DisplayFor(modelItem => item.RoomId)</td> 
                    <td>@Html.DisplayFor(modelItem => item.ReservationStatusName)</td>      
                </tr>

解决方案是什么,谢谢

3 个答案:

答案 0 :(得分:0)

:checked无法用作tr元素。您需要选中当前tr元素上下文中的复选框,即this中可以使用.each()

if($(this).find('.idRow:checkbox').is(':checked')){
    ...
}

答案 1 :(得分:0)

您的代码存在的问题是您正在检查是否已选中tr - 这可能永远不会成立。您需要检查tr中的复选框。另请注意,您应该使用this处理程序中的each()关键字来检查当前迭代中的元素。试试这个:

var urls = [];
$('.table tr').each(function () {
    if ($(this).find('.idRow').is(':checked')) {
        urls.push($(this).find('td').eq(1).text());
    }
});

但请注意,您可以使用map()方法创建所需的数组来改善逻辑。试试这个:

var urls = $('.table tr .idRow:checked').map(function() {
    return $(this).closest('tr').find('td:eq(1)').text();
}).get();

答案 2 :(得分:0)

您无法检查一行,只能选中复选框和单选按钮。因此,您需要在行中的复选框上使用:checked

您可以使用选择器直接获取这些内容,但不需要使用.each()。然后,您可以使用.map()从下一个<td>创建一个文本数组。

var urls = $('.table .idRow:checked').parent().next().map(function() {
    return $(this).text();
}).get();