2017-05-16 3 views
0

나는 make an input only-numeric type on knockout을보고있었습니다. 대답은 정상적으로 작동하지만 소수점 (예 : 4.4.4)을 두 번 이상 입력하지 못하도록 할 수 있습니까 (또는 두 번째 소수점을 어떻게 방지 할 수 있습니까?).자바 스크립트 : 숫자 입력 - 소수점 한 개 이상을 방지합니다

코드는 다음과 같이 진행됩니다

<input id="text" type="text" data-bind="numeric, value: number"> 

ko.bindingHandlers.numeric = { 
init: function (element, valueAccessor) { 
    $(element).on("keydown", function (event) { 
     // Allow: backspace, delete, tab, escape, and enter 
     if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || 
      // Allow: Ctrl+A 
      (event.keyCode == 65 && event.ctrlKey === true) || 
      // Allow: . , 
      (event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 110) || 
      // Allow: home, end, left, right 
      (event.keyCode >= 35 && event.keyCode <= 39)) { 
      // let it happen, don't do anything 
      return; 
     } 
     else { 
      // Ensure that it is a number and stop the keypress 
      if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) { 
       event.preventDefault(); 
      } 
     } 
    }); 
} 
}; 
+0

이 도움이 될 것입니다 http://stackoverflow.com/questions/39394445/number-input-box-in-knockout-js이 – Rajesh

+0

안녕 인 Rajesh이 허용 대답에 내가 입력 캔트 소수점이있는 숫자 –

+0

[Fiddle] (https://jsfiddle.net/RajeshDixit/w5dh36jv/8/)과 같은 것을 시도 할 수 있습니다. 이것은 완전한 해결책이 아님을주의하십시오. 적절한 패턴을 공식화 할 수 있다면이 솔루션을 사용하십시오. 그렇지 않으면 내 질문에 접근 할 수 있습니다. 그들은 잘 작동하지만, 그들은 또 하나의 프로세싱을 추가 할 것입니다. – Rajesh

답변

0

바인딩 사용자 정의 나를 위해 잘 보이지 않습니다. 내가 방금 Knockout Validation을 사용하여, 녹아웃과 내 워크 플로우에서 훌륭한 플러그인을 증명하는 것이 좋습니다거야. 구문은 쉽습니다 : ko.observable(...).extend({ number: true }). 최소/최대 유효성 검사 : .extend({ number: true, min: 0, max: 100 }) // percentage을 추가 할 수 있으며 플러그인은 CSS 클래스를 잘못된 요소에 추가 할 수 있습니다.

아래 예를 참조하십시오. 그것은 당신이 원하는 것입니다.

function viewModel() { 
 
    this.number = ko.observable(0).extend({ number: true }); 
 
} 
 

 
ko.applyBindings(new viewModel(), document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.js"></script> 
 

 
<input data-bind="textinput: number" />

+1

@ SVSchmidt 유효성은 좋지만 문자, 특수 문자 ("."제외) 및 이와 유사한 것들을 방지 할 수있는 방법이 있습니다. 입력에 5.4.3이 입력되지 않았습니까? –

+0

@simba Meek : ko.validation에는 몇 가지 옵션이 있습니다. https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Configuration하지만 입력 한 문자를 실제로 제한 할 수는 없습니다. 하지만 그게 필요한가요? 나는 항상 그가 생각하는 바에 따르면, 그가 바보라고 말하면 사용자가 원하는대로 입력하도록하십시오. ko.validatiln을 사용하면 관찰 가능 항목이 유효한지 ('.isValid()') 확인할 수 있으며 적절하게 반응 할 수 있습니다. – SVSchmidt