数字验证不绑定Observable(仅限IE10)

时间:2013-06-03 09:09:25

标签: knockout.js numeric

我有IE10的问题。我正在使用knockout.js作为MVVM。我还使用输入验证来确保只接受数值。其中一个验证是来自here的jquery.numeric。在所有浏览器中一切正常,但在IE10中没有。使用IE10验证是有效的,但绑定不起作用意味着我无法从文本框中输入它始终为空的值。请帮助我的代码。

HTML和jQuery

<div class='liveExample'>   
    <p>With jquery.numeric: <input data-bind='value: withnumeric' id="withnumeric"/></p> 
    <p>With/Out jquery.numeric: <input data-bind='value: withoutnumeric' /></p> 
   <p><button data-bind="click: CompareBehavior" type="button">Submit</button>
 </div>

$(document).ready(function(){
$('#withnumeric').numeric();
    //this one doesn't work also
// $("#withnumeric").bind("keyup paste",  function () {
//    setTimeout(jQuery.proxy(function () {
//        this.val(this.val().replace(/[^0-9]/g, ''));
//    }, $(this)), 0);
//});
});

ViewModel

var ViewModel = function() {
    this.withnumeric = ko.observable();
    this.withoutnumeric = ko.observable();

self.CompareBehavior = function () {
    alert(this.withnumeric());
    alert(this.withoutnumeric());
};
};
ko.applyBindings(new ViewModel());

如果你想玩我的jsfiddle,请看这里http://jsfiddle.net/Vs8yn/3/

2 个答案:

答案 0 :(得分:3)

这似乎是Internet Explorer 10和jQuery-numeric的兼容性问题。好消息是你可以告诉Knockout使用其他事件(除change之外)来更新绑定。在这种情况下,添加blur就足够了:

<input data-bind='value: withnumeric, valueUpdate: "blur"' id="withnumeric"/>

jsFiddle:http://jsfiddle.net/Vs8yn/12/

答案 1 :(得分:0)

在你的jsFiddle中,你没有在加载时绑定你的视图模型:

$(function(){
    ko.applyBindings(new ViewModel());
    $('#withnumeric').numeric();
});

您还需要使用值初始化observable:

var ViewModel = function() {
    var self = this;
    self.withnumeric = ko.observable(0);
    self.withoutnumeric = ko.observable(0);

self.CompareBehavior = function () {
    alert(self.withnumeric());
    alert(self.withoutnumeric());
};

我已经更新了它,它似乎可以在IE10中使用。