2014-08-28 3 views
1

У меня есть поле ввода, и я хочу ограничить его только для числовых значений. Как я могу это сделать в нокаута JSКак ограничить поле ввода числовым в нокаут js

здесь является мое поле

<input data-bind="value: nsc" /> 
+0

использование Нокаут проверка –

+0

Ответ дается здесь @Seminda гораздо лучше, чем ответ на вопрос, который вы связаны между собой. –

ответ

0

Guess этот вопрос уже ответил. Возможно, вам потребуется создать настраиваемое связывание, которое допускает только допустимые символы.

Ответ на этот пост в этой ссылке поможет вам: make an input only-numeric type on knockout

+0

Ответ, данный здесь @Seminda, намного лучше, чем ответ в связанном вами вопросе. Пользовательское связывание не является идеальным решением для этого, расширитель гораздо более гибкий, а также обеспечивает лучшее разделение кода (ваш HTML не должен диктовать вашу логику домена, ваш JavaScript должен). –

4

Вы можете написать функцию в вашей модели представления.

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; 

};

Проверить эту ссылку, как использовать: Sample code

+1

Это, безусловно, лучший способ сделать это. (Также лучше, чем принятый ответ в ссылке @ Raghavendra-N). Это происходит главным образом из-за двух причин: расширитель гораздо более гибкий, чем пользовательская привязка, и это способствует лучшему разделению кода. Под этим я подразумеваю, что имеет смысл ограничивать числовые значения только в вашем JavaScript, поскольку он представляет логику домена, чем в вашем HTML, который связан с представлением. –

+0

Привет, Хан, можете ответить на этот вопрос http://stackoverflow.com/questions/25637663/converting-circular-structure-to-json-in-knockout-js – user2142786

Смежные вопросы