gpt4 book ai didi

javascript - 使用 knockout 进行使用 attr 类型的数据绑定(bind)时,IE8 会抛出 "This command is not supported"错误

转载 作者:行者123 更新时间:2023-11-29 17:15:45 26 4
gpt4 key购买 nike

代码:-

<html>
<head>
<script type="text/javascript" src="http://knockoutjs.com/downloads/knockout-2.3.0.js"></script>
</head>
<body>
<table>
<thead>
<tr>
<th>Name</th>
<th>InputType</th>
</tr>
</thead>
<tbody data-bind="foreach: settings">
<tr>
<td data-bind="text: name"></td>
<td><input data-bind="attr: {type: dtype}"/></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var viewModel = function(){
this.settings = ko.observableArray([{name: "Bungle",dtype:"text"},{name: "George",dtype: "checkbox"},{name: "Zippy",dtype:"text"}]);
};

ko.applyBindings(new viewModel());
</script>
</body>
</html>

上面的代码也在fiddle http://jsfiddle.net/uByVQ/中捕获.虽然,fiddle 中捕获的场景在 chrome 中运行良好,但在 IE8 中无法正常运行。我得到错误

“不支持此命令”。

我用的是knockout 2.3

任何人都可以指出我的解决方法吗?

谢谢。

最佳答案

似乎在 IE 中,输入元素的类型一旦添加到 DOM 中就无法更改。

The type property is read/write-once, but only when an input element is created with the createElement method and before it is added to the document.

http://msdn.microsoft.com/en-us/library/ms534700.aspx

有一些丑陋的解决方法涉及创建一个新元素并删除现有元素,但您必须编写一个自定义的 knockout Binder 来完成它。

你可以用 if binding 绕过它:

<tr>
<td data-bind="text: name"></td>
<td>
<span data-bind="if: dtype=='checkbox'"><input type='checkbox' /></span>
<span data-bind="if: dtype=='text'"><input type='text' /></span>
</td>
</tr>

参见:http://jsfiddle.net/GQEs5/

但这确实令人不满意且冗长。

我还要补充一点,在您的模型中包含演示细节在哲学上是不纯的,但我绝对认识到您的方法的实用好处。

关于javascript - 使用 knockout 进行使用 attr 类型的数据绑定(bind)时,IE8 会抛出 "This command is not supported"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com