当用户使用键盘时,Knockout.js valueUpdate无效

时间:2012-05-08 23:48:06

标签: javascript knockout.js

我正在使用Knockout.js和ASP.NET。我的HTML如下:

<div class="InputField">
    Fixed/Floating
    <div class="FieldContainer">
        <select data-bind="options: $root.FixedLoanOptions, selectedOptions: IsFixed, valueUpdate: 'change'" ></select>
    </div>
</div>

如果用户使用鼠标选择项目,则JSON将返回到具有更新信息的服务器。但是,如果用户使用“tab”选项卡进入选择控件,选择一个项目,然后选项卡关闭,那么即使UI上显示所选项目,JSON也会返回该控件的空白值。

如果用户仅使用键盘,似乎Knockout视图模型不会更新,当用户使用鼠标时,似乎有一些特定于浏览器中发生的更改事件。

我该如何解决这个问题?有没有办法可以在onchange事件中注册选择框以使用手动更新Knockout模型的函数?

我在IE9和Firefox中都尝试过,我在两者中都有同样的问题。

4 个答案:

答案 0 :(得分:2)

其余代码是什么样的?如何进行AJAX调用?

使用键盘修改选择的示例在IE和Firefox上对我来说没问题:

http://jsfiddle.net/mikebridge/yYS7c/2/

答案 1 :(得分:0)

当knockoutjs将模型更新为模糊时,您可以更改事件,触发更多。

<div class="InputField">
    Fixed/Floating
    <div class="FieldContainer">
        <select data-bind="valueUpdate: 'blur', options: $root.FixedLoanOptions, selectedOptions: IsFixed" ></select>
    </div>
</div>

答案 2 :(得分:0)

正如您在Live example Knockout更新模型中看到的那样,仅当选择了选项时:

  • 鼠标单击
  • 按下键盘箭头按钮后输入按钮。

答案 3 :(得分:0)

将valueUpdate绑定到'keyup'为我做了诀窍。不影响使用鼠标进行的更改,所以到目前为止看起来很好。

所以这样的事情应该有效:

<div class="InputField">
    Fixed/Floating
    <div class="FieldContainer">
        <select data-bind="valueUpdate: 'keyup', options: $root.FixedLoanOptions, selectedOptions: IsFixed" ></select>
    </div>
</div>