首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在选中具有相同id的另一个复选框时禁用复选框

如何在选中具有相同id的另一个复选框时禁用复选框
EN

Stack Overflow用户
提问于 2018-12-06 12:15:19
回答 5查看 1.3K关注 0票数 5

我有一个表,其中一列中有一个复选框。当复选框被选中时,我将行推入数组。

我试图用下面的..real世界来更好地解释这一点

该表可以包含具有重复id的行(行(flat_id)的列不同)。我上面提到的重复id是user_map_id

当我选中(单击复选框)一行时,我希望禁用具有相同user_map_id的其他行。

因此,当检查行时,我将user_map_id存储在一个数组中。然后我这样做:

ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0

也就是说,如果user_map_id存在于具有选定user_map_id的数组中,我将禁用该行,但这也会禁用我选中的那个,并且如果我想取消选中它,我将无法取消选中它。

因此,我也将flat_id推入数组,并执行了以下操作:

ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && selectedFlatNumArray.indexOf(flat.flat_id) < 0 "

即,如果行的user_map_id存在于selectedUserMapIdArray(存储user_map_id)数组中,而不存在于selectedFlatNumArray(存储flat_id)中,则禁用该行

但是现在,当我检查具有与重复flat_id之一flat_id相同的特定user_map_id的行,然后再次检查该组中的一个时,具有公共flat_id的行不会被禁用,因为我上面检查的flat_id存在于selectedFlatNumArray(存储flat_id)中。

用现实世界的解释

这是一个截图:

表中的行是单位所有者和居住者的列表(两者都有user_map_id)。一个单位业主可以有多个单位(因此表中有重复的user_map_id)。业主可以拥有多个单位(不同的flat_ids)。

但是公寓业主可以有一个居住者(same flat_id different user_map_id)。住客可以住在业主的多个单位中的一个(same flat_id different user_map_id)。

我希望能够检查任何单位的业主(其他人是残疾的),也是一个住户(如果我想)。

如果我检查row与该单位业主的其中一个单位,属于同一单位业主的其他行被禁用,并且工作正常。

但是,当我检查一个占有者的行,然后再次检查该占有者的平面所有者(没有相同的flat_id)时,具有相同flat_id的行不会被禁用,因为flat_id存在于selectedFlatNumArray(存储flat_id)中

我该怎么做呢?

下表:

代码语言:javascript
复制
 <tbody>
    <tr ng-repeat="flat in someObj.flatsArray | filter:searchFlat">
       <td>{{ flat.occupant_name || flat.owner_name}}</td>
       <td>{{flat.flat_no}}</td>
       <td class="text-center">
     <input class="" name="{{flat.flat_no}}" ng-attr-title="{{(selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && selectedFlatNumArray.indexOf(flat.flat_id) < 0) ? 'This user has been already invited' : ''}}"
         ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && selectedFlatNumArray.indexOf(flat.flat_id) < 0 "
     type="checkbox" ng-change="checkChanged(flat.isChecked, flat)" ng-model="flat.isChecked" />
              </td>
</tr>
</tbody>
EN

回答 5

Stack Overflow用户

发布于 2018-12-12 03:52:31

我觉得你的ng-disabled和你的ng-title应该简化,这样更容易理解。我建议删除您的数组并遍历原始的数组,看看当一个flat发生更改时,它是否满足您的条件。这将更容易调试和避免错误。

代码语言:javascript
复制
<input name="{{flat.flat_no}}" 
       ng-attr-title="{{flat.title}}"
       ng-disabled="flat.isDisabled"
       type="checkbox" 
       ng-change="flatChange(flat)" 
       ng-model="flat.isChecked" />

我建议在您更改复选框以对其他平面进行更改时遍历您的对象。注意,这是未经测试的代码,因此可能需要进行一些调整。

代码语言:javascript
复制
$scope.flatChange = function(changedFlat) {
    $scope.someObj.flatsArray.forEach(function(flat) {

        if (changedFlat.checked) {
            if (flat.user_map_id === changedFlat.user_map_id && flat.flat_id !== changedFlat.flat_id) {
                if (changedFlat.idChecked) // If flat is checked, uncheck each one with the same `user_map_id` but not the same `flat_id`.
                    flat.isChecked = false;
                }

                flat.isDisabled = !changedFlat.checked; // `disabled` propriety is the opposite of `checked`.
                flat.title = changedFlat.checked
                            ? 'This user has been already invited'
                            : '';
         }
     });
 };
票数 4
EN

Stack Overflow用户

发布于 2018-12-08 14:31:54

我不太明白你的质询,但我有一种感觉,就是你想将小业主(拥有单位而又可以拥有多个单位的使用者)与单位住客(即居住单位但只可拥有一个单位的使用者)区别对待。除非您将业主和住户存储在不同的字段中,否则您将无法做到这一点,而您似乎没有这样做。

票数 2
EN

Stack Overflow用户

发布于 2018-12-14 03:07:44

我不清楚你想要的行为。你是选公寓还是选人?当你想让住在单位的人被选中时,你为什么要停用单位呢?

我认为您可能只想禁用基于user_id的行,这样就可以得到如下内容

代码语言:javascript
复制
ng-disabled="selectedUserMapIdArray.indexOf(flat.user_map_id) >= 0 && !flat.isChecked"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53644580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档