Мне нужна маска ввода, которая не синхронизируется с наблюдаемыми переменными knockoutJS.
Пример: если пользовательский ввод 50000000, пользовательский интерфейс должен отображать замаскированное значение (500000.00), но в переменной ViewModel (knockoutJS) оно должно сохраняться как 500000.00
Я пробовал с 3 следующими плагинами jQuery
- github.com/RobinHerbots/Inputmask
- github.com/igorescobar/jQuery-Mask-Plugin
- digitalbush.com/projects/masked-input-plugin/
Даже пробовал с интеграцией knockoutJS плагина маски ввода RobinHerbots.
Все эти плагины работали отлично, но проблема в том, что когда пользователь вводит значение 50000000, оно отображается как 500000.00, но оно было сохранено в наблюдаемой переменной knockoutJS с тем же значением (500000.00).
Кто-нибудь сталкивался с такой проблемой?
Обновление:
Я изменил код в маске ввода RobinHerbots (интеграция с нокаутом), и теперь я удаляю все запятые из входной строки, когда значение обновляется. [JAVASCRIPT]
ko.bindingHandlers.inputmask = {
init: function (element, valueAccessor, allBindingsAccessor) {
var mask = valueAccessor();
var observable = mask.value;
if (ko.isObservable(observable)) {
$(element).on('focusout change', function () {
if ($(element).inputmask('isComplete')) {
observable($(element).val());
} else {
observable(null);
}
});
}
$(element).inputmask(mask);
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var mask = valueAccessor();
var observable = mask.value;
if (ko.isObservable(observable)) {
var valuetoWrite = observable();
$(element).val(valuetoWrite);
var value = valuetoWrite.toString().replace(/,/g ,'');
observable(value);
}
}
[HTML]
<input type="text" data-bind="inputmask: { value:ItemPrice , mask:'999,999.99'}" />
Теперь работает так, как мне нужно. Кто-нибудь знает, как получить маску валюты (она не работает так, как мы делали с jQuery) в маске ввода RobinHerbots в нокаутной версии?