【问题标题】:Using a checkbox to change table row styling使用复选框更改表格行样式
【发布时间】:2011-07-27 20:28:17
【问题描述】:

我有一个动态生成的 n 行表格,每行都有一个复选框。选中复选框时,如何使该表行具有不同的背景颜色?

如果需要,我可以使用 jQuery。

【问题讨论】:

    标签: jquery css checkbox


    【解决方案1】:

    如果您使用的是 jQuery,那就太简单了:

    $("tr :checkbox").live("click", function() {
        $(this).closest("tr").css("background-color", this.checked ? "#eee" : "");
    });
    

    Live example

    基本上,它的作用是识别一行中包含的复选框,观察对它们的点击,然后在事件处理程序中使用它们的状态来设置包含该复选框的行的background-color CSS 样式。

    需要考虑扩充/修改的事项:

    • 我使用live 以防客户端上的表是动态的(例如,如果您添加或删除行),尽管您可能更喜欢使用以表为根的delegate。如果表格完全是静态的,您可以只使用click
    • 上述钩子所有行内的复选框,这可能比你想要的更多。 jQuery 支持几乎所有的CSS3's selectorsa fair bit more,因此您可以为复选框制作选择器以使其更窄。一个基本的变化是按类($("tr :checkbox.foo"),其中“foo”是类)或复选框名称($("tr :checkbox[name=foo]"))进行过滤。
    • 作为Morten suggests below,您可能会考虑添加/删除一个类,而不是直接在代码中提供 CSS 值,因为这有助于将您的脚本与样式分离。

    【讨论】:

    • 当我在你的选择器上画了个缺口时,请给我点赞(使用 css 类和父母而不是最接近的)。
    【解决方案2】:
    $('tr :checkbox').live('click', function () {
        $(this).closest('tr').toggleClass('selected_row_style');
    });
    

    【讨论】:

    • 然后回到 atcha,使用类而不是内联样式。更适合解耦。
    【解决方案3】:
    $("checkbox").live("click", function()
    { 
        if (this.checked) 
        {
           $(this).attr('background-color','#FFFFFF');
        }
        else
        {
           $(this).attr('background-color','#000000');
        }
    }
    

    【讨论】:

    • 你不是想改变输入元素的背景而不是父单元格/行吗?另外,您的意思可能是$(this) 而不是this
    • @AJweb:第二次,是的;第一个(this.checked)是正确的。另外,@Alan,当你 uncheck 时会发生什么?
    • 感谢您指出我的错误,我太着急了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多