限制0作为第一个数字在mac键盘中正常工作但在Windows输入字段中除0作为第一个数字

时间:2016-06-20 06:16:03

标签: javascript jquery

我正在尝试将0限制为输入字段中的第一个数字。它在macbook中工作正常,但是当用户在windows系统中输入数量时,输入字段除了数字0之外,它也不是数字9作为第一个数字,例如:9845但它除了8945之外。下面是代码。

我只是对这个bug的位置感到困惑。如果有人能帮助我解决这个问题会很棒:

JS CODE:

$("#stamp_amount").keydown(function (e) {
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A, Command+A
        (e.keyCode == 65 && ( e.ctrlKey === true || e.metaKey === true ) ) || 
         // Allow: home, end, left, right, down, up
        (e.keyCode >= 35 && e.keyCode <= 40)) {
             // let it happen, don't do anything
             return;
    }

    if ( event.keyCode == 46 || event.keyCode == 8) {
        // let it happen, don't do anything

    }
    else {
        // Ensure that it is a number and stop the keypress
        if ((event.keyCode !==9) && (event.keyCode < 48 || event.keyCode > 57 )) {
            event.preventDefault(); 
        }   
            else{

          if($.trim($(this).val()) =='')
        {
            if(event.keyCode == 48 || event.keyCode == 57 || event.keyCode == 96 || event.keyCode == 105){
                event.preventDefault(); 
            }
        }

        }
    }
});

1 个答案:

答案 0 :(得分:1)

不检查按下了哪个键,而是检查输入值本身。

正则表达式/^0|[^0-9.]/表示starts with 0 or contains character other than numbers and .

$(document).ready(function() {
  $('#inp').change(function() {
    if ($(this).val().length == 0 || /^0|[^0-9.]/.test($(this).val())) {
      $('#valid').removeClass('valid');
    } else {
      $('#valid').addClass('valid');
    }
    
    // make input valid
    $(this).val($(this).val().replace(/^0+|[^0-9.]+/, ''));
  });
})
#valid:after {
  content: "No";
  color: red;
  font-weight: bold;
}
#valid.valid:after {
  content: "Yes";
  color: green;
  font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="inp" placeholder="51.54" />Eur
<br/>
<span id="valid"></span>