【问题标题】:click anywhere on the row to check the checkbox and highlight it?单击行上的任意位置以选中复选框并突出显示它?
【发布时间】:2014-04-05 19:50:50
【问题描述】:

我有一个脚本,它将从 mysql DB 中获取结果,并以整洁的表格格式显示带有所有结果的复选框。 我想让它像,单击行上的任意位置以触发复选框并突出显示整行。一次可选择多行。

我已经尝试了 onlclick 和 getElementById 功能的 JS 方法,并在 CSS 中使用 :checked。 到目前为止没有任何进展。

<table id="tab-1">
    <thead>
        <tr>
            <th scope="col">Select</th>
            <th scope="col">ID</th>
            <th scope="col">A</th>
            <th scope="col">B</th>
            <th scope="col">C</th>
            <th scope="col">D</th>
            <th scope="col">E</th>
            <th scope="col">E</th>
            <th scope="col">F</th>
            <th scope="col">G</th>
            <th scope="col">H</th>
            <th scope="col">I</th>
            <th scope="col">J</th>
            <th scope="col">k</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="checkbox[]" id="checkbox[]" value="<?php echo $row['ID']; ?>"  /></td>
            <td><?php echo $row['ID']; ?></td>
            <td><?php echo $row['A']; ?></td>
            <td><?php echo $row['B']; ?></td>
            <td><?php echo $row['D']; ?></td>
            <td><?php echo $row['E']; ?></td>
            <td><?php echo $row['F']; ?></td>
            <td><?php echo $row['G']; ?></td>
            <td><?php echo $row['H']; ?></td>
            <td><?php echo $row['I']; ?></td>
            <td><?php echo $row['J']; ?></td>
            <td><?php echo $row['K']; ?></td>
            <td><?php echo $row['L']; ?></td>
            <td><?php echo $row['M']; ?></td>
        </tr>
    </tbody>
<table>

【问题讨论】:

    标签: javascript php html mysql css


    【解决方案1】:

    如果你会用jquery,你可以试试

    $(document).on('click','tr',function(){
     $(this).find('input[type="checkbox"]').prop('checked',true);
     $(this).css('background','yellow'); // or anything else for highlighting purpose
    });
    

    根据 cmets 更新 JSFiddle

    【讨论】:

    • @syedfurqhan 这是 jQuery 1.6+ 语法,如果您使用的是旧版本的 jQuery,请尝试使用 attr('checked',true) 而不是 prop()
    • @syedfurqhan 据我所知,它正在工作.. jsfiddle.net/tilwinjoy/UD6Tk/1
    • @Joy 感谢它的工作,但问题是无法切换。换句话说,该行只能检查一次。我无法通过单击同一行来取消选中。
    • 只需将用于突出显示的 css 放在一个类中,然后在点击处理程序中使用 toggleClass() .. 检查这个 JSFiddle
    • @还有一个建议,你可能不想选择标题行,所以我修改了选择器here
    【解决方案2】:

    例如像这样使用 jQuery:

    $('#table').on('click', 'tr', function() {
        $(this).find('td:first :checkbox').trigger('click');
    })
    .on('click', ':checkbox', function(e) {
        e.stopPropagation();
        $(this).closest('tr').toggleClass('selected', this.checked);
    });
    

    演示:http://jsfiddle.net/3E4Lk/2/

    【讨论】:

    • 它在 jsfiddle 中工作正常,但不是在我的本地主机上,我也下载了 jquery 2.0.2。 :O
    【解决方案3】:

    您可以使用 classList.toggle 切换行上的活动类,并使用 !ele.checked 切换复选框的选中状态。

    CSS

    tr.active {
       background:rgba(0,255,0,0.35);
    }
    

    Javascript

    function rowClicked(){
       var inputs = this.getElementsByTagName("input");
       var checkboxes = [].filter.call(inputs,function(input){
          return input.type == "checkbox" && input.name == "checkbox[]";
       });
       this.classList.toggle("active");       
       if(checkboxes[0]) checkboxes[0].checked = this.classList.contains("active")
    
    }
    window.addEventListener("load",function(){
       var table = document.getElementById("tab-1");
       var rows = table.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
       for(var i=0; i<rows.length; i++){
          rows[i].addEventListener("click",rowClicked);
       }
    });
    

    JSFiddle

    【讨论】:

    • 尝试检查单击复选框本身的行。
    • 工作正常,但是当您单击复选框时,您无法选择或取消选择。
    • @syedfurqhan,我刚刚编辑了它,添加了this.classList.contains("active"),现在可以使用
    • 但是如果你要使用 jQuery,不妨选择 dsfq 的答案,因为它更短。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2017-01-02
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多