选择选项并在其他下拉列表中禁用相同的选项

时间:2019-01-10 14:55:43

标签: angular typescript select

在我的Anuglar应用程序中,我生成一些选择框,其数量可能有所不同。每个选择框都有相同的选项。我要做的是,如果我在一个选择框中选择一个选项,则应在所有其他选择框中禁用同一选项,这样其他选择框不能同时具有相同的值。如果我在该选择框中选择了另一个选项,则应在所有其他选择框中启用前一个,并应禁用新的选择。

我可以说它可以与两个选择框一起使用。如果还有更多,它将无法正常工作。

这是一个由选择框的onChange调用的函数:

public disableAlreadyUsedOption(group: any, dropDownId: any): void {
if (group.usecase === 'usage_ds' || group.usecase === 'usage_dg') {
  this.listOfdropDowns[group.usecase].forEach((element, indexOfForeach) => {
    const tmpDropDownId = group.usecase  + '_' + indexOfForeach;
    if (dropDownId !== tmpDropDownId) {
      const op = document.getElementById(tmpDropDownId).getElementsByTagName('option');
      for (let i = 1; i < op.length; i++) {
        if (op[i].value === group.optionValue) {
          op[i].disabled = true;
          op[i].className = 'disabledOtions';
        } else {
          op[i].disabled = false;
          op[i].className = '';
        }
      }
    }
  });
}
}

1 个答案:

答案 0 :(得分:0)

我将使用禁止值数组禁用复选框及其选项。索引将代表已检查的组,以及已检查的选项的值。

forbiddenValues = [];

optionsGroups = [
  ['option 1', 'option 2', 'option 3'],
  ['option 1', 'option 2', 'option 3'],
  ['option 1', 'option 2', 'option 3'],
];

onGroupOptionChecked(optionGroup, optionValue) {
  const indexOfGroup = this.optionsGroups.indexOf(optionGroup);
  const indexOfOption = this.forbiddenValues[indexOfGroup].indexOf(optionValue);
  this.forbiddenValues[indexOfGroup] = indexOfOption;
}

现在,您可以遍历您的选项,并非常简单地停用它们:

<option-group *ngFor="let group of optionsGroups; let groupIndex = index">
   <option-value *ngFor="let option of group; let optionIndex = index" 
     [value]="option"
     [disabled]="forbiddenValues.indexOf(optionIndex) !== -1">{{ option }}</option-value>
</option-group>