javascript - 对多个选择框上的 selectedOptions 使用一个选项列表进行 knockout

标签 javascript knockout.js knockout-2.0

http://jsfiddle.net/E2AMX/有问题的确切证明,即: 我在同一页面上有多个选择框。选择框的所有选项均采用给定的形式:

<option value="#id_num">StringVal</option>

我有一个 id_nums 的 observableArray(比如 idlist),关于选择框没有分隔。例如,

idlist = ko.observableArray([1,2,3,4]);

选择框如下

<select name="first" data-bind="selectedOptions: idlist">
    ...
    <option value="2">Blah</option>
    <option value="3">Blah</option>
    ...
</select>

<select name="second" data-bind="selectedOptions: idlist">
    ...
    <option value="1">Blah</option>
    ...
</select>

<select name="third" data-bind="selectedOptions: idlist">
    ...
    <option value="4">Blah</option>
    ...
</select>

我的问题是:当我从选择框中选择一个选项时,其他选择框返回到其初始状态。这与 selectedOptions 直接相关,因为如果我删除 selectedOptions 指令,则不会出现此问题。

任何建议都将受到欢迎。

谢谢。

最佳答案

selectedOptions 绑定(bind)旨在用于单个 <select>启用多选的标签。它将保留所选选项框中每个项目的数组。

您看到这种行为的原因是,当您从下拉列表之一中选择单个值时,selectedOptions 绑定(bind)会立即触发。逻辑是这样的:

  1. 目标更新 <select>火灾。
  2. 绑定(bind)从 <option> 中提取值并更新底层可观察数组。
  3. 由于值已更改,Observable 数组会触发更新。
  4. 辅助下拉菜单响应更新,并根据数组中的内容更新其选择的值。
  5. 因为 <option> 集合中不存在任何值标签,该值被清除。

这就是您看到此行为的原因。如果您想从所有选定的选项中收集组合,那么您需要编写一个新的自定义绑定(bind),或者为每个 <select> 创建一个单独的数组。您想要绑定(bind)到。

关于javascript - 对多个选择框上的 selectedOptions 使用一个选项列表进行 knockout ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134682/

相关文章:

javascript - 如何使用 bootstrap 的 table table-hover 类突出显示数据列表中的一行

javascript - select 中的 div 有效吗?

javascript - KnockoutJs 超链接到新选项卡

css - knockout js 星级 "value not get cleared"

javascript - Knockout JS $data 绑定(bind)上下文

javascript - underscore.js 中按日期对数组进行排序

javascript - 根据异步数据计算出的计算可观察量

javascript - 如何在js文件中使用php文件中的变量?

javascript - 当更改事件有界的对象时,JQuery 的 .next() 似乎不起作用

javascript - HighCharts 和 idTabs - 图表宽度设置不正确