2013-06-24 3 views
0

Я делаю проверку на элемент ввода = 'текст'. Я подключил события «paste» и «keydown», чтобы захватить входные данные и ограничить их просто цифрами. Keydown, похоже, работает без сучка и задоринки, однако я не мог заставить ни один из браузеров фактически НЕ Вставить текст в поле (я вижу, что есть событие beforepaste, которое может быть билетом - однако оно появляется чтобы не поддерживать Firefox. В конце концов, я привел к простому закрытию ввода, если значение не было числом. Это вызывает мгновенное мерцание, но, похоже, работает.Проверка числового ввода

Есть ли более чистый способ сделать это ? Я там что-то отсутствует? это все равно, чтобы предотвратить мерцание? Я знаю, что HTML5 имеет тип = «число», но я не готов пойти туда еще.

<input type="text" id="number" /> 

<script type="text/javascript"> 
    $(document).ready(function() { 

     enableNumericOnlyEntry("#number"); 

     function enableNumericOnlyEntry(object) { 
      $(object).bind('paste', numericOnlyPaste); 
      $(object).bind('keydown', null, numericOnlyKeyDown); 

      function numericOnlyPaste(event) { 
       var inputText = ""; 
       var element = event.target; 
       setTimeout(function() { 
        var text = $(element).val(); 
        if (isNaN(text)) { 
         $(element).val("") 
         return false; 
        } 
       }, 0); 
      } 

      function numericOnlyKeyDown(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/a 
        (event.keyCode == 65 || event.keyCode == 97) && (event.ctrlKey === true) || 
        // Allow: Ctrl+C/c 
        (event.keyCode == 67 || event.keyCode == 99) && (event.ctrlKey === true) || 
        // Allow: Ctrl+V/v 
        (event.keyCode == 86 || event.keyCode == 118) && (event.ctrlKey === true) || 
        // Allow: Ctrl+X/x 
        (event.keyCode == 88 || event.keyCode == 120) && (event.ctrlKey === true) || 
        // Allow: home, end, left, right 
        (event.keyCode >= 35 && event.keyCode <= 39)) { 
        // let it happen, don't do anything 
        return true; 
       } 
       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)) { 
         return false; 
        } 
       } 
      } 
     } 
    }); 
+0

Не многие браузеры поддерживают его еще, но HTML5 имеет тип номера для ввода именно так. Вам все равно понадобится это для обратной совместимости, но по крайней мере вы можете воспользоваться новыми функциями. – qw3n

ответ

0

Я использовал этот проект для создания поля, которое является скрытым полем редактирования, вы можете удалить un derscore к этому также так, чтобы он не выглядел как маскированное редактирование. Действительно прост в использовании: http://digitalbush.com/projects/masked-input-plugin/

тогда вы бы использовали что-то вроде $ ("# box"). Mask ("9999999"); и твоя доброта, отлично работает!

0

HTML5's <input type="number"> действительно, где вы хотите пойти с этим. Если вы работаете с браузерами, которые его поддерживают (в основном, все, кроме Safari и старых версий IE), он делает все, что вам нужно.

Сказали, почему бы не зарегистрировать обработчик onpaste, чтобы вы могли уменьшить вставленный контент до нужных чисел после того, как пользовательские пасты?

+1

Поддержка 'type =" number "' немного более прерывистая, чем в настоящее время: http://caniuse.com/#feat=input-number. Safari (рабочий стол) поддерживает его, но Firefox этого не делает. Тем не менее, существует доступный [richable] (https://github.com/h5bp/html5please/blob/master/posts/input-number.md) полиполк. –

+0

он пытался использовать такие параметры, как сказал, что вставка сделала мерцание, и хотел чего-то другого, кроме type = 'number', подумайте, что редактирование маски будет лучшим способом для него, они работают как шарм. –