2017-01-26 2 views
1
<input type="number" data-bind="value: value"/> 

<h2>Value: <span data-bind="text: value"/></h2> 

var ViewModel = function() { 
this.value = ko.observable(); 
}; 

ko.applyBindings(new ViewModel()); 

Теперь, если я введу «23,45», в хроме значение данных привязки будет сохранена как «23.45» , но в Internet Explorer все равно будет «23,45». Оба браузера находятся на французском языке, а Windows 10, на котором я запущен, также настроен на французские региональные настройки. Французский использует запятую для десятичного разделителя.Введите номер с запятой не анализируются как числовое значение в данной-привязке, в IE

Как я могу заставить IE правильно привязать значение? Как числовое.

+0

Я использую пользовательские привязки, которые используют numeraljs (http://numeraljs.com/), который хорошо работает в браузерах и хорошо номеров аналогично моменту для обработки даты. – jjj

ответ

1

как о просто записываемой вычисленной наблюдаемым http://knockoutjs.com/documentation/computed-writable.html

function model() { 
 
    var self = this; 
 
    this.mynumber = ko.observable(); 
 
    this.computedNumber = ko.pureComputed({ 
 
    read: function() { 
 
     return this.mynumber() 
 
    }, 
 
    write: function(value) { 
 
     var n = value.replace(/,/g, "."); 
 
     var number = (!isNaN(parseFloat(n)) && isFinite(n)) ? n : ''; 
 
     self.mynumber(number); 
 
    }, 
 
    owner: this 
 
    }); 
 

 
} 
 

 
var mymodel = new model(); 
 

 
$(document).ready(function() { 
 
    ko.applyBindings(mymodel); 
 
});
<script src="http://knockoutjs.com/downloads/knockout-3.2.0.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input data-bind="value: computedNumber" />

+0

Спасибо за предложение. Этот формат чтения/записи очень похож на get/set из C#, который именно то, что я искал. –