IE9没有在knockoutjs中正确创建带有optgroup的选择框

时间:2015-07-15 20:46:44

标签: knockout.js

手动创建选择框时,IE9不起作用。就我所见,它没有抛出错误而且没有任何渲染。

<select id="attributes" data-bind="value: value, valueAllowUnset: true" class="form-control">
   <!-- ko  foreach: groupedAttributes -->
      <optgroup data-bind="attr : { label: name }" label="default">
        <!-- ko foreach: things -->
          <option data-bind="text: name, disabled:disabled, value: $data"></option>
        <!-- /ko -->
      </optgroup>
   <!-- /ko -->
</select>

JS
var vm = {
  value: ko.observable(),
  groupedAttributes : [
    {
      name: "thing 1",
      things : [ { name: "test1", disabled: false},{ name: "test2", disabled: false} ]
    }, 
    {
      name: "thing 2",
      things : [ { name: "test3", disabled: false}, { name: "test4", disabled: false} ]
    }
  ]
}; 
ko.applyBindings(vm);  

适用于Chrome和FF。

See JS Bin

有什么想法?

2 个答案:

答案 0 :(得分:1)

我们可以通过避免使用containerless条件语句

来解决这个问题

修改后的视图:

<select id="attributes" data-bind="value: value, valueAllowUnset: true,foreach:groupedAttributes" class="form-control">
    <optgroup data-bind="attr : { label: name },foreach:things" label="default">
        <option data-bind="text:name,value: $data"></option>
    </optgroup>
</select>
<div data-bind="text: ko.toJSON(value)"></div>

工作小提琴 here

PS:在IE 8 +,Chrome,Firefox中测试。

答案 1 :(得分:1)

IE9不允许除<input type="number" id="plannedVisit" styleClass="form-control" > <select>以外的<option>中的任何其他子元素;这包括评论。 IE9(也是IE8)在Knockout可以评估任何绑定之前很久就会删除所有其他内容,所以当KO想要应用绑定时,注释已经消失了。

您必须使用<optgroup>绑定或使用options元素本身的foreach绑定:

<optgroup>