【问题标题】:Highlight table row when check box is checked选中复选框时突出显示表格行
【发布时间】:2013-04-16 19:40:28
【问题描述】:

选中复选框时需要突出显示整行,未选中时删除突出显示。我当前的代码仅突出显示复选框单元格而不是整行。救命!

JSP:

 <tbody>
<c:forEach items="${summary}" var="summary">

<tr>
<td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.eventDesc}" />
</td>
 <td bgcolor='<c:out value="${summary.color}"></c:out>'><a
                href="/analysis/loadAnalysisDetailFromSummary?labelNbr=${summary.labelNbr}&loadDate=${summary.loadDate}"><c:out
                        value="${summary.labelNbr}" /> </a>
            </td>

        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.origin}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.senderName}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.receiverName}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.receiptDate}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.loadDate}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.forecastIsc}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.actualIsc}" />
            </td>
        <td bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.country}" />
            </td>
    <td id="td1" bgcolor='<c:out value="${summary.color}"></c:out>'><c:out
                    value="${summary.source}" />
            </td>
<c:if test="${isAll == 'false'}">
    <td align='center' bgcolor='<c:out value="${summary.color}"></c:out>'>
    <input name='summaryCheckbox' type="checkbox" class="cbx" 
 value='<c:out value="${summary.labelNbr}"></c:out>,<c:out   
  value="${summary.loadDate}"></c:out>,
      <c:out value="${summary.eventInd}"></c:out>'>
            </td>
            </c:if>
        </tr>

    </c:forEach>
</tbody>  

jquery:

$(document).ready(function(){
  $("input[type='checkbox']").change(function(e) {
    if($(this).is(":checked")){ 
   $(this).closest('td').addClass("highlight");

  }
    else{
      $(this).closest('td').removeClass("highlight");
    }
  });
});

CSS:

table{border: 1px solid;}
.highlight{background: #C0C0C0;}   

【问题讨论】:

  • 请发布呈现的 HTML,而不是任何内容。

标签: javascript jquery checkbox jquery-selectors


【解决方案1】:

这里的问题是,当您将它从 closest("td") 切换到 closest("tr") 时,它正在工作 [它设置了类],但 CSS 是错误的。您需要将背景颜色添加到单元格,而不是行。

你的 CSS

table{border: 1px solid;} 
.highlight{background: #C0C0C0;}

需要

table{border: 1px solid;} 
.highlight td {background: #C0C0C0;}

注意高亮后的 TD。

【讨论】:

    【解决方案2】:
    $(function(){
        $("input[type='checkbox']").on('change', function() {
            $(this).closest('tr').toggleClass("highlight", this.checked);
        });
    });
    

    【讨论】:

    • 我会这样做:$("table tbody").on('change', "input[type='checkbox']", function() { 所以它附加到一个元素,而不是每个 cb。
    • @epascarello - 几个元素、20 个元素甚至更多元素真的很重要吗?委托也有成本,检查表中的每个更改事件以查看它是否源自复选框。
    • 谢谢!我试过使用 .closest('tr') 但它没有用,这就是我发布这个问题的原因。我也尝试过使用 parents() 但这也没有用。
    【解决方案3】:

    使用.closest('tr')

    $(document).ready(function(){
      $("input[type='checkbox']").change(function(e) {
        if($(this).is(":checked")){ 
          $(this).closest('tr').addClass("highlight");
        }else{
          $(this).closest('tr').removeClass("highlight");
        }
      });
    });
    

    【讨论】:

    • 谢谢!我试过使用 .closest('tr') 但它没有用,这就是我发布这个问题的原因。我也尝试过使用 parents() 但也没有用。
    猜你喜欢
    • 2020-05-03
    • 2020-08-23
    • 2012-04-26
    • 2012-05-18
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多