如何使用jQuery选择所有tbody输入值的值

时间:2013-12-04 20:54:38

标签: javascript jquery html input children

所以我有一些复选框,当每个复选框都被检查时,我能够从关联的表格行中获取我需要的ID号,并将它们放入我的contacts数组中。

我还有一个全选复选框,这意味着抓取所有ID号并将它们粘贴到同一个数组中。

在尝试找出定位tbody的正确语法时遇到一些麻烦,请选择每个表行的data-id或每个表行的输入值。

http://jsfiddle.net/leongaban/7LCjH/

^在我的小提琴示例中,您可以看到数字被添加到我的数组(或可视化的灰色div)。

<小时/> 你如何从Select all复选框中获取tbody行中的所有id号?

的jQuery

var contacts = [];

// add multiple select / deselect functionality
$("#selectall").click(function () {
    $('.case').attr('checked', this.checked);
    //contacts.push($('#tbody').children(tr > td > input).val();)
});

// if all checkbox are selected, check the selectall checkbox
// and viceversa
$(".case").click(function() {

    var $tr = $(this).closest("tr");
    var id = $tr.data('coworker-id');

    contacts.push(id);

    $('#arrayContent').empty();
    $('#arrayContent').append(contacts+',');

    if ($(".case").length == $(".case:checked").length) {
        $("#selectall").attr("checked", "checked");
    } else {
        $("#selectall").removeAttr("checked");
    }   

});

HTML

<table>

<thead>
    <tr>
        <td><input type="checkbox" id="selectall"/></td>
        <td>Select All</td>
    </tr>
    <tr>
        <td colspan="2"><hr/></td>
    </tr>
</thead>

<tbody id="tbody">
    <tr data-coworker-id="1">
        <td><input type="checkbox" class="case" name="case" value="1"/></td>
        <td>1</td>
    </tr>
    <tr data-coworker-id="2">
        <td><input type="checkbox" class="case" name="case" value="2"/></td>
        <td>2</td>
    </tr>
    <tr data-coworker-id="3">
        <td><input type="checkbox" class="case" name="case" value="3"/></td>
        <td>3</td>
    </tr>
</tbody>

enter image description here

5 个答案:

答案 0 :(得分:1)

您可以像这样修改select all handler:

$("#selectall").click(function () {
    $('.case').attr('checked', this.checked).each(function() {
         contacts.push($(this).val())
    });
});

答案 1 :(得分:1)

这是一个有效的例子:

var contacts = [];

// add multiple select / deselect functionality

$("#selectall").click(function () {
    var els = $('.case')
    if (els.first().is(':checked') ) {
        els.prop('checked', false);
        $('#arrayContent').empty();
    } else {
        els.attr('checked', true);
        $.each(els, function(index, el) {
             contacts.push( $(el).val() ); 
        });
        $('#arrayContent').empty();
        $('#arrayContent').append(contacts.join( ', ' ) );
    }
    //contacts.push($('#tbody').children(tr > td > input).val();)
});

// if all checkbox are selected, check the selectall checkbox
// and viceversa

$(".case").click(function() {

    var $tr = $(this).closest("tr");
    var id = $tr.data('coworker-id');

    contacts.push(id);

    $('#arrayContent').empty();
    $('#arrayContent').append(contacts+',');

    if ($(".case").length == $(".case:checked").length) {
        $("#selectall").attr("checked", "checked");
    } else {
        $("#selectall").removeAttr("checked");
    }   

});

这里是小提琴链接:: http://jsfiddle.net/kkemple/7LCjH/24/

答案 2 :(得分:1)

你可以试试这个

$("#selectall").click(function () {

if($('.case:checked').length == $('.case').length){
    //deselect all
    $('.case').removeAttr("checked");
    contacts = [];
}
else{
    //select all
    $('.case').attr("checked", "checked").each(function(){

        var $tr = $(this).closest("tr");
        var id = $tr.data('coworker-id');

        contacts.push(id);

    })
}    




$('#arrayContent').empty();
$('#arrayContent').append(contacts.join(','));
//contacts.push($('#tbody').children(tr > td > input).val();)
});

jsFiddle

答案 3 :(得分:1)

使用find代替children,然后循环元素以将它们添加到数组中。

$("#selectall").click(function () {
  $('.case').attr('checked', this.checked);
  $('tbody').find("input").each(function () {
    contacts.push($(this).val()+",");
  });
  $('#arrayContent').append(contacts);
});
  

.find()和.children()方法类似,只是后者只沿DOM树向下移动一层。

来源:http://api.jquery.com/find/

答案 4 :(得分:0)

我知道这并不能完全回答使用子项的问题,但您可以使用$('#tbody').find('input')查找元素中的所有输入字段。