Помогите улучшить эту маску ввода JavaScript - PullRequest
1 голос
/ 25 февраля 2011

Особенности

  • Только цифры
  • Уникальная точка (.)

Но ... мне нужно улучшить до разрешить цифры пользователя только два числа после точки

Допустимые примеры:

  • 121213
  • 123450,10
  • 12345678910111213,39

Текущий код (адаптированный с , это , , не нужно сохранять точно такой же код ... ):

<HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt,obj){

         var containsDot = obj.value.indexOf(".");

         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57)){
              if(charCode == 46 && containsDot < 0){
                return true;
              }
                return false;
         }
         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event,this)" type="text" name="txtChar">
   </BODY>
</HTML>

Ответы [ 4 ]

3 голосов
/ 25 февраля 2011

Просто используйте регулярное выражение.Например,

function isNumberKey(evt, obj){
    return obj.value.match(/[0-9]*(\.[0-9]{0,2})?/)
}
1 голос
/ 25 февраля 2011

Я разместил полностью рабочую версию этого здесь: http://jsfiddle.net/georgecalm/NRtVs/2/

HTML:

<input id="txt" type="text" name="txtChar" />

JS:

var isStrValid = function(str) {
  return ((str.match(/[^\d^.]/) === null) 
       && (str.replace(/\d+\.?\d?\d?/, "") === ""));
};

var node = dojo.byId("txt");
dojo.connect(node, "onkeyup", function() {
    if (!isStrValid(node.value)) {
      node.value = node.value.substring(0, node.value.length-1);
    }
});

Первая проверка (isStrValid) удостоверяет, что у вас нет ничего, кроме чисел и точки. Вторая проверяет шаблон.

0 голосов
/ 25 февраля 2011

Вы можете запустить функцию с помощью

if (obj.value.match(/\.[0-9][0-9]/)) {
    // Already has two decimals
    return false;
}
0 голосов
/ 25 февраля 2011

Если у него есть точка, но после нее нет двух цифр, верните false.

if(containsDot && obj.value.split(".")[1].length != 2){
  return false; 
}
...