2016-10-19 3 views
0

У меня есть текстовое поле ввода типа «текст». Мое требование - это текстовое поле может принимать только цифры и десятичные точки [это необязательно]. Я не могу использовать шаг, потому что шаг будет определять десятичные точки после цифр, поскольку у меня мало сценариев, где я не хочу использовать десятичную точку. Например, если мой выпадающий выбор зависит от количества транзакций, тогда текстовое поле не должно допускать ввода десятичных знаков. Второй пример. Если мой выпадающий выбор - это сумма транзакции, тогда текстовое поле должно позволить мне вводить ввод с десятичной точкой.Вход HTML с заданным шаблоном

+0

Возможный дубликат [Номер ввода в Knockout JS] (http://stackoverflow.com/questions/39394445/number-input-box-in-knockout-js) – AldoRomo88

+0

Спасибо @ AldoRomo88. Будет пытаться реализовать таким же образом –

ответ

0

скрипку http://jsfiddle.net/LkqTU/32169/

звучит как, возможно, вы ищете нокаут удлинитель http://knockoutjs.com/documentation/extenders.html

в скрипке я в основном скопированный код из документации нокаута http://jsfiddle.net/LkqTU/32169/ путем изменения значения точности вы решите, сколько знаков после запятой округлить до.

ko.extenders.numeric = function (target, precision) { 
    //create a writable computed observable to intercept writes to our observable 
    var result = ko.pureComputed({ 
     read: target, //always return the original observables value 
     write: function (newValue) { 
      var current = target(), 
       roundingMultiplier = Math.pow(10, precision), 
       newValueAsNum = isNaN(newValue) ? 0 : parseFloat(+newValue), 
       valueToWrite = Math.round(newValueAsNum * roundingMultiplier)/roundingMultiplier; 

      //only write if it changed 
      if (valueToWrite !== current) { 
       target(valueToWrite); 
      } else { 
       //if the rounded value is the same, but a different value was written, force a notification for the current field 
       if (newValue !== current) { 
        target.notifySubscribers(valueToWrite); 
       } 
      } 
     } 
    }).extend({ notify: 'always' }); 

    //initialize with current value to make sure it is rounded appropriately 
    result(target()); 

    //return the new computed observable 
    return result; 
}; 


function model() { 
    var self = this; 
    myvalue1 = ko.observable('').extend({ numeric: '0' }); 
    myvalue2 = ko.observable('').extend({ numeric: '2' }); 
} 

var mymodel = new model(); 

$(document).ready(function() { 
    ko.applyBindings(mymodel); 

}); 
Смежные вопросы