HTML5 input type=number value is empty in Webkit if has spaces or non-numeric characters?

后端 未结 5 1787
温柔的废话
温柔的废话 2020-12-01 15:39

This is strange behavior to me but on Webkit browsers (Chrome/Safari, not Firefox) if I include a space in a string of numbers in an

5条回答
  •  星月不相逢
    2020-12-01 16:19

    I can suggest two ways. 1. Prevent chars in input

    # updated to support more numerical characters related
    $(window).keydown(function(e) {
      if($('input[type=number]').index($(e.target))!=-1) {
        if(
          ($.inArray(e.keyCode, [48,49,50,51,52,53,54,55,56,57,58,96,97,98,99,100,101,102,103,104,105,8,13,190,189]) == -1) // digits, digits in num pad, 'back', 'enter', '.', '-'
          || (e.keyCode == 190 && $(e.target).val().indexOf(".") != -1) // not allow double dot '.'
          || (e.keyCode == 190 && $(e.target).val().length == 0) // not allow dot '.' at the begining
        ) {
          e.preventDefault();
        }
      }
    });
    

    or 2. Change input's type on fly

    $('input[type=number]').focus(function() {
        $(this).prop('type', 'text');
    });
    

    this allows to put whatever you want and change its type back onblur

    $(this).blur(function() {
        $(this).prop('type', 'number');
    });
    

    But still you cannot store nonnumerical values in input with type=number, so val() will always return you empty string if it meets char or space.

    So, at least you have to remove all garbage with .replace(/[^\d]/g, '') - that means "remove all except numbers" before you change type back

    In my example I show both methods + clear input values.

提交回复
热议问题