3

我在表格中有一个复选框,当你点击它时,它会相应地改变背景颜色,就像这样......

$("#table tr td :checkbox").bind("click change", function() {
    $this = $(this); // cache the jquery object
    if($this.is(':checked')) { $this.closest('tr').css('background-color', 'lightyellow'); }
    else { $this.closest('tr').css('background-color', '#fff'); }
});

这工作得很好,但是,我想我想做得更好,所以你点击表格行的任何地方,它都会选中该框并突出显示该行。

我尝试使用此代码,但不幸的是它不起作用:

$("table tr").bind("click", function() {
    $(this).parents("tr").find(":checkbox").attr('checked');
});

这是 HTML 代码(删除了过多的内容以提高可读性...

<td>Name</td>
<td>Description</td>
<td><input type="checkbox"></td>

任何帮助将不胜感激,谢谢!

4

3 回答 3

2

你想改变这个:

$(this).parents("tr").find(":checkbox").attr('checked');

对此:

$(this).parents("tr").find(":checkbox").attr('checked', 'checked');

否则,您所做的只是读取属性checked,而不是设置它。

于 2009-08-14T13:01:25.943 回答
2

您处理的事件是 tr 点击。父母是桌子,所以这无济于事。您需要做的就是在 this 上下文中使用 find() 。

我会使用 .live 来避免使用多个事件处理程序。

假设您在该行中只有一个复选框,然后使用以下内容。(注意它在 tbody 内部使用 tr 以避免在前行上运行它)

$("table>tbody>tr").live("click", function() {
    $(this).find(":checkbox").attr('checked', 'checked');
});

更新

如果你想切换它尝试类似

$("table>tbody>tr").live("click", function(ev) {
        var $checkbox = $(this).find(":checkbox");
        //check to see we have not just clicked the actual checkbox
        if ( !$(ev.target).is(':checkbox') ){
            $checkbox.is(':checked') ? $checkbox.removeAttr('checked')
                                     : $checkbox.attr('checked', 'checked')
        }
 });
于 2009-08-14T13:01:43.370 回答
1

我认为您只是忘记设置属性的值。

$("table tr").bind("click", function() {
    $(this).find(":checkbox").attr('checked', 'checked');
});

jQuery Docs on Attributes可能会有所帮助。


感谢 redsquare注意到不需要.parent("tr")

于 2009-08-14T13:02:34.367 回答