单击表格行时如何避免选中复选框

Posted

技术标签:

【中文标题】单击表格行时如何避免选中复选框【英文标题】:How to avoid checkbox being selected when clicking on table row 【发布时间】:2017-12-03 09:09:40 【问题描述】:

我有一个表格,其中一列是一个复选框,我需要根据特定逻辑激活或不激活。

我的问题是,即使复选框被禁用,当我点击复选框之外的表格行时,复选框也会被选中。

解决此问题的最佳方法是什么? 是否也停用行表?

 <table st-safe-src="sampleOverview.dataSet" st-table="sampleOverview.displayed" class="table table-striped">
    <tr ng-repeat="sample in sampleOverview.displayed track by $index" ng-click="sample.selected = !sample.selected" ng-class="success: sample.selected, warning : sample.deviceId == null || sample.methodId == null " ng-disabled="sample.deviceId == null || sample.methodId == null">
                <td class="hidden-xs hidden-sm">sample.lab</td>
                <td class="hidden-xs hidden-sm">sample.subLab</td>
                <td>sample.deviceLimsCode</td>
                <td>sample.methodLimsCode</td>
                <td>sample.sampleCode</td>
                <td class="text-center hidden-xs hidden-sm">
                    <input type="checkbox" ng-model="sample.selected" ng-click="sampleOverview.selectSample($event, sample)" ng-disabled="sample.deviceId == null || sample.methodId == null">
                </td>
            </tr>
        </tbody>
    </table>

【问题讨论】:

【参考方案1】:

您在行上使用ng-click。去掉它。您在表格行上的ng-click 正在触发复选框模型的值发生变化。您可以更改复选框的 ng-model 的名称或删除 ng-click on table 或更改后者中使用的变量。

 <table st-safe-src="sampleOverview.dataSet" st-table="sampleOverview.displayed" class="table table-striped">
    <tr ng-repeat="sample in sampleOverview.displayed track by $index" ng-class="success: sample.selected, warning : sample.deviceId == null || sample.methodId == null " ng-disabled="sample.deviceId == null || sample.methodId == null">
                <td class="hidden-xs hidden-sm">sample.lab</td>
                <td class="hidden-xs hidden-sm">sample.subLab</td>
                <td>sample.deviceLimsCode</td>
                <td>sample.methodLimsCode</td>
                <td>sample.sampleCode</td>
                <td class="text-center hidden-xs hidden-sm">
                    <input type="checkbox" ng-model="sample.selected" ng-click="sampleOverview.selectSample($event, sample)" ng-disabled="sample.deviceId == null || sample.methodId == null">
                </td>
            </tr>
        </tbody>
    </table> 

或者,如果您想根据 ng-click 在行中添加一个类,请更改变量名称,如下所示

<table st-safe-src="sampleOverview.dataSet" st-table="sampleOverview.displayed" class="table table-striped">
    <tr ng-repeat="sample in sampleOverview.displayed track by $index" ng-click="selectedVal = !selectedVal" ng-class="success: selectedVal, warning : sample.deviceId == null || sample.methodId == null " ng-disabled="sample.deviceId == null || sample.methodId == null">
                <td class="hidden-xs hidden-sm">sample.lab</td>
                <td class="hidden-xs hidden-sm">sample.subLab</td>
                <td>sample.deviceLimsCode</td>
                <td>sample.methodLimsCode</td>
                <td>sample.sampleCode</td>
                <td class="text-center hidden-xs hidden-sm">
                    <input type="checkbox" ng-model="sample.selected" ng-click="sampleOverview.selectSample($event, sample)" ng-disabled="sample.deviceId == null || sample.methodId == null">
                </td>
            </tr>
        </tbody>
    </table>

并在你的控制器中初始化 selectedVal

【讨论】:

嗨 Vivz,感谢您的回复。有没有办法保持 ng-click 并阻止传播?我试过 ng-click="sample.selected = !sample.selected; $event.stopPropagation();"它没有工作 为什么需要复选框的 ng-model 与 ng-click 中的一次相同,为什么要切换它们 嗨,Vivz。感谢回复。我需要它,因为当我切换到移动视图时,我的复选框不会出现。当移动视图打开时,ng-click 使表格可选择 然后像上面的第二个解决方案一样为 ng-click 使用不同的变量 或者您可以为您的移动视图定义一个类,并且仅当它是移动视图时才启用行点击

以上是关于单击表格行时如何避免选中复选框的主要内容,如果未能解决你的问题,请参考以下文章

element-UI 表格单击行时选中该行CHECKBOX

单击以选中复选框时避免关闭下拉菜单

el-table表格合并行时多选框选中/取消单号相同数据

如果选中复选框,请按 Enter 触发按钮单击

Word中如何固定表格的宽和高

可点击的行仅适用于数据表的第一页