禁用属性不适用于选择标签上的必需属性

Posted

技术标签:

【中文标题】禁用属性不适用于选择标签上的必需属性【英文标题】:disabled attribute doesn't work with required attribute on select tag 【发布时间】:2017-01-19 18:31:01 【问题描述】:

我有以下部分的html模板:

<div class="row">
    <div class="medium-3 columns">
        <label>Category
        <select [(ngModel)]="item.cat" name="cat" required>
            <option *ngFor="let a of categories" [ngValue]="a">a.name</option>
        </select>
        </label>
    </div>

    <div class="medium-3 columns">
        <label>Categoria
        <select [(ngModel)]="item.place" name="place" [disabled]="!item.cat">
            <option *ngFor="let c of places" [ngValue]="c">c.name</option>
        </select>
        </label>
    </div>
</div>

如您所见,第二个select 被禁用,直到用户从第一个选择中选择一个选项。因此,如果用户从第一个选择中选择一个选项,则第二个选择将变为活动状态。

现在我想将required 属性添加到第二个选择中。但如果我这样做,第二个select 总是被禁用。

这种行为是不是很奇怪?

这是Plunker(感谢 Stefan Svrkota)。

【问题讨论】:

好吧,我只是试图重新创建这个问题,但你的代码对我来说很好。这是您的代码预期行为的 plnkr,请查看:plnkr.co/edit/QX3LfN 您可能需要更新到最新的 Angular2 版本。 @GünterZöchbauer 我已经有了最新版本(RC6)。 @StefanSvrkota 您的代码可以工作,但不能满足我的需要。您在option 标签上添加disabled 而不是select。我希望第二个select 菜单的项目既不可选择也不可见。 谜团加深:如果 Angular 禁用标签存在积极条件,它就会起作用。例如,如果我使用 [disabled]="firstSelect" 而不是 [disabled]="!firstSelect" 它可以正常工作。 【参考方案1】:

[disabled] 作用于布尔表达式,如果表达式返回/评估为真,它将被禁用,否则不会。在您的情况下,您已将 disabled 属性与数值绑定。什么都不评估

【讨论】:

以上是关于禁用属性不适用于选择标签上的必需属性的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 必需属性不适用于 AJAX 提交

jquery 属性选择器不适用于数据属性

jQuery 属性等于选择器不适用于自定义属性

为什么direction属性不适用于块级元素

实时查询插件不适用于可见属性选择器

禁用属性不适用于 ListBoxFor 和 DropDownListFor