Как разрешить только числовые (0-9) в поле ввода HTML, используя jQuery? - PullRequest
850 голосов
/ 15 июня 2009

Я создаю веб-страницу, где у меня есть поле ввода текста, в котором я хочу разрешить только числовые символы, такие как (0,1,2,3,4,5 ... 9) 0-9.

Как я могу сделать это с помощью jQuery?

Ответы [ 63 ]

6 голосов
/ 24 мая 2012

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

http://ajax911.com/numbers-numeric-field-jquery/

$("#textfield").bind("keyup paste", function(){
    setTimeout(jQuery.proxy(function() {
        this.val(this.val().replace(/[^0-9]/g, ''));
    }, $(this)), 0);
});
6 голосов
/ 26 июня 2013

Это кажется неразрывным.

// Prevent NULL input and replace text.
$(document).on('change', 'input[type="number"]', function (event) {
    this.value = this.value.replace(/[^0-9\.]+/g, '');
    if (this.value < 1) this.value = 0;
});

// Block non-numeric chars.
$(document).on('keypress', 'input[type="number"]', function (event) {
    return (((event.which > 47) && (event.which < 58)) || (event.which == 13));
});
6 голосов
/ 25 марта 2013

Вот ответ, который использует фабрику виджетов jQuery UI. Вы можете настроить, какие символы разрешены легко.

$('input').numberOnly({
    valid: "0123456789+-.$,"
});

Это позволило бы цифры, знаки числа и суммы в долларах.

$.widget('themex.numberOnly', {
    options: {
        valid : "0123456789",
        allow : [46,8,9,27,13,35,39],
        ctrl : [65],
        alt : [],
        extra : []
    },
    _create: function() {
        var self = this;

        self.element.keypress(function(event){
            if(self._codeInArray(event,self.options.allow) || self._codeInArray(event,self.options.extra))
            {
                return;
            }
            if(event.ctrlKey && self._codeInArray(event,self.options.ctrl))
            {
                return;
            }
            if(event.altKey && self._codeInArray(event,self.options.alt))
            {
                return;
            }
            if(!event.shiftKey && !event.altKey && !event.ctrlKey)
            {
                if(self.options.valid.indexOf(String.fromCharCode(event.keyCode)) != -1)
                {
                    return;
                }
            }
            event.preventDefault(); 
        });
    },

    _codeInArray : function(event,codes) {
        for(code in codes)
        {
            if(event.keyCode == codes[code])
            {
                return true;
            }
        }
        return false;
    }
});
5 голосов
/ 19 января 2012

Я тоже хотел бы ответить:)

    $('.justNum').keydown(function(event){
        var kc, num, rt = false;
        kc = event.keyCode;
        if(kc == 8 || ((kc > 47 && kc < 58) || (kc > 95 && kc < 106))) rt = true;
        return rt;
    })
    .bind('blur', function(){
        num = parseInt($(this).val());
        num = isNaN(num) ? '' : num;
        if(num && num < 0) num = num*-1;
        $(this).val(num);
    });

Вот и все ... только цифры. :) Почти он может работать только с «размытием», но ...

5 голосов
/ 22 октября 2013

Простой способ проверить, является ли введенное значение числовым:

var checknumber = $('#textbox_id').val();

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }
5 голосов
/ 14 апреля 2015

Вы можете попробовать ввести номер HTML5:

<input type="number" placeholder="enter the number" min="0" max="9">

Этот элемент тега ввода теперь будет принимать значение только от 0 до 9 для атрибута min установлено значение 0, а для атрибута max - 9.

для получения дополнительной информации о посещении http://www.w3schools.com/html/html_form_input_types.asp

5 голосов
/ 29 января 2014

Просто нужно применить этот метод в Jquery, и вы можете проверить текстовое поле, чтобы просто принять только номер.

function IsNumberKeyWithoutDecimal(element) {    
var value = $(element).val();
var regExp = "^\\d+$";
return value.match(regExp); 
}

Попробуйте это решение здесь

5 голосов
/ 07 декабря 2010

Я хотел немного помочь, и я сделал свою версию, функцию onlyNumbers ...

function onlyNumbers(e){
    var keynum;
    var keychar;

    if(window.event){  //IE
        keynum = e.keyCode;
    }
    if(e.which){ //Netscape/Firefox/Opera
        keynum = e.which;
    }
    if((keynum == 8 || keynum == 9 || keynum == 46 || (keynum >= 35 && keynum <= 40) ||
       (event.keyCode >= 96 && event.keyCode <= 105)))return true;

    if(keynum == 110 || keynum == 190){
        var checkdot=document.getElementById('price').value;
        var i=0;
        for(i=0;i<checkdot.length;i++){
            if(checkdot[i]=='.')return false;
        }
        if(checkdot.length==0)document.getElementById('price').value='0';
        return true;
    }
    keychar = String.fromCharCode(keynum);

    return !isNaN(keychar);
}

Просто добавьте в тег ввода "... input ... id =" price "onkeydown =" вернуть толькоNNUM (событие) "..." и все готово;)

5 голосов
/ 05 октября 2011

Вы хотите разрешить вкладку:

$("#txtboxToFilter").keydown(function(event) {
    // Allow only backspace and delete
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 ) {
        // let it happen, don't do anything
    }
    else {
        // Ensure that it is a number and stop the keypress
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});
4 голосов
/ 18 марта 2011

Существует невероятная проблема совместимости с использованием нажатий клавиш для обнаружения нажатого символа ... см. quirksmode , чтобы узнать больше об этом.

Я бы предложил использовать keyup для создания вашего фильтра, потому что тогда у вас есть метод $ (element) .val (), который вы можете использовать для оценки реальных универсальных символов.

Затем вы можете отфильтровать любые NON-цифры, используя регулярное выражение, например:

заменить (/ [^ 0-9] / г, '');

Это решает все проблемы, такие как проблемы смещения и вставки, потому что всегда есть keyup, и поэтому значение всегда будет оцениваться (если javascript не выключен).

Итак ... чтобы превратить это в JQuery ... Вот небольшой незавершенный плагин, который я пишу, он называется inputmask и будет поддерживать больше масок, когда закончите. На данный момент работает маска цифр.

Вот, пожалуйста ...

/**
 * @author Tom Van Schoor
 * @company Tutuka Software
 */
(function($) {
  /**
   * @param {Object}
   * $$options options to override settings
   */
  jQuery.fn.inputmask = function($$options) {
    var $settings = $.extend( {}, $.fn.inputmask.defaults, $$options);

    return this.each(function() {
      // $this is an instance of the element you call the plug-in on
      var $this = $(this);

      /*
       * This plug-in does not depend on the metadata plug-in, but if this
       * plug-in detects the existence of the metadata plug-in it will
       * override options with the metadata provided by that plug-in. Look at
       * the metadata plug-in for more information.
       */
      // o will contain your defaults, overruled by $$options,
      // overruled by the meta-data
      var o = $.metadata ? $.extend( {}, $settings, $this.metadata()) : $settings;

      /*
       * if digits is in the array 'validators' provided by the options,
       * stack this event handler
       */
      if($.inArray('digits', o.validators) != -1) {
        $this.keyup(function(e) {
          $this.val(stripAlphaChars($this.val()));
        });
      }

      /*
       * There is no such things as public methods in jQuery plug-ins since
       * there is no console to perform commands from a client side point of
       * view. Typically only private methods will be fired by registered
       * events as on-click, on-drag, etc... Those registered events could be
       * seen as public methods.
       */

      // private method
      var stripAlphaChars = function(string) {
        var str = new String(string); 
        str = str.replace(/[^0-9]/g, ''); 
        return str;
      }

    });
  };

  // static public functions
  //jQuery.fn.inputmask.doSomething = function(attr) {

  //};

  // static public members
  //jQuery.fn.inputmask.someStaticPublicMember;

  // some default settings that can be overridden by either $$options or
  // metadata
  // If you need callback functions for the plug-in, this is where they get
  // set
  jQuery.fn.inputmask.defaults = {
    validators : []
  };
})(jQuery);

Чтобы использовать это просто сделайте:

$('#someElementId').inputmask({
  validators: ['digits','someOtherNotYetImplementedValidator']
});

SomeOtherNotYetImplementedValidator просто показывает, как это можно расширить для дополнительных будущих масок / валидаторов. Вы можете добавить это или пропустить, это ничего не нарушает; -)

Извинения за дополнительный беспорядок комментариев, я использую шаблон, который я создал для парней здесь на работе.

Надеюсь, это поможет, Приветствия

...