Knockout.js 使用optgroup+进行选择;选项标题中带有敲除的选项似乎被忽略

Knockout.js 使用optgroup+进行选择;选项标题中带有敲除的选项似乎被忽略,knockout.js,Knockout.js,我有一个使用optgroup和selecthtml标记的解决方案 以下是SO帖子: 现在我想在这个选择中允许一个空值。我尝试使用选项标题: <select data-bind="foreach: brands, optionsCaption: ' '"> <optgroup data-bind="attr: {label: $data}, foreach: $parent.vehicles"> <!-- ko if: Brand == $pare

我有一个使用optgroup和selecthtml标记的解决方案

以下是SO帖子:

现在我想在这个选择中允许一个空值。我尝试使用选项标题:

<select data-bind="foreach: brands, optionsCaption: '  '">
    <optgroup data-bind="attr: {label: $data}, foreach: $parent.vehicles">
    <!-- ko if: Brand == $parent -->
        <option data-bind="text: Type"></option>
    <!-- /ko -->
    </optgroup>
</select>

但它不起作用:没有空选项

有什么想法吗


谢谢。

您只能将
选项caption
绑定与
选项
绑定成对使用。由于您不使用它,因此必须手动将空选项添加到选项列表:

<select data-bind="foreach: brands">
     <option value=''>  </option>
    <optgroup data-bind="attr: {label: $data}, foreach: $parent.vehicles">
    <!-- ko if: Brand == $parent -->
        <option data-bind="text: Type"></option>
    <!-- /ko -->
    </optgroup>
</select>


这里有一个实用工具:

如果您只想在第一个组之前显示标题,还可以将标题的可见性数据绑定到$index<1

<select data-bind="foreach: brands">
    <option data-bind="visible: $index() < 1">Select vehicle</option>    
        <optgroup data-bind="attr: {label: $data}, foreach: $parent.vehicles">
        <!-- ko if: Brand == $parent -->
        <option data-bind="text: Type"></option>
        <!-- /ko -->
    </optgroup>
</select>

选择车辆

我知道它可以在JSFIDLE中使用,但我在适当的应用程序中使用了敲除验证和数据库后端,但它不起作用。选择此空选项时出现验证失败错误。有什么想法吗?我还尝试了
。可能绑定到select的字段是必需的,因此当您选择空值时,验证失败。不,这不是必需的。在我的页面中,必填字段自动标记为红色。这个肯定不是必需的。我还成功地直接在数据库中更改了该值(以进行测试)。您能在小提琴中重现您的问题吗?不幸的是,它不能与我的数据库作为后端一起工作。也许我可以把我的测试项目发布到某个地方给你看?