请参阅下面的简单示例;绑定到计算的observable的文本框。我的问题是,当文本框更新时,IE会将写入方法调用两次。 Firefox和其他浏览器似乎没有这个问题。我在IE 7和IE中观察到了这个问题。 8。
首先,我做错了什么?如果没有,建议的处理方法是什么?
<script>
var viewModel = {
myTestVar: "aaa"
};
viewModel.myTest = ko.computed({
read: function () {
return viewModel.myTestVar;
},
write: function (value) {
alert(value);
viewModel.myTestVar = value;
},
owner: viewModel
});
$(document).ready(function () {
ko.applyBindings(viewModel);
});
</script>
</head>
<body>
<input data-bind="value:myTest",type="text" style="width:150px;" />
</body>
答案 0 :(得分:1)
value
绑定有一个特殊部分,用于处理Internet Explorer中的自动完成。这通常会导致两次写入。如果您不关心自动完成,可以通过向input
添加属性来关闭它:
<input data-bind="value:myTest" type="text" style="width:150px;" autocomplete="off" />
答案 1 :(得分:0)
试试这个:
write: function (value) {
if(value != viewModel.myTestVar) {
alert(value);
viewModel.myTestVar = value;
}
}
由于viewModel.myTestVar不是一个可观察的,我不知道为什么写两次调用,但检查应该阻止实际的多次写入。