2011-03-15 2 views
0

Я нашел следующий код jQuery в Интернете, но вскоре обнаружил, что он имеет недостаток в том, что он не принимает десятичную точку (код ascii 46) - хотя код кажется, позволяет это.с помощью jQuery/javascript для ограничения ввода поля цены

В настоящее время я не могу ввести цены, такие как 1.23, так как период игнорируется, и я получаю 123 вместо этого.

Может ли кто-нибудь обнаружить whty, что это не работает?

// Numeric only control handler 
$.fn.ForceNumericOnly = 
function() 
{ 
    return this.each(function() 
    { 
     $(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0; 

      // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY 
      return (
       key == 8 || 
       key == 9 || 
       key == 46 || 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }) 
    }) 
}; 

Я использую плагин так:

$(function(){ 
    $('#price_field').ForceNumericOnly(); 
}); 

ответ

0

Просто добавьте . (код 190 и 110) для проверки:

// Numeric only control handler 
$.fn.ForceNumericOnly = 
function() 
{ 
    return this.each(function() 
    { 
     $(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0; 

      // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY 
      return (
       key == 8 || 
       key == 9 || 
       key == 46 || 
       key == 190 || // normal . 
       key == 110 || // keypad . 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }) 
    }) 
}; 
0

Вы должны добавить код ключа 190, чтобы принять ""

// Numeric only control handler 
$.fn.ForceNumericOnly = function() { 
return this.each(function() 
{ 
    $(this).keydown(function(e) 
    { 
     var key = e.charCode || e.keyCode || 0; 

     // allow dot, backspace, tab, delete, arrows, numbers and keypad numbers ONLY 
     return (
      key == 190 || 
      key == 8 || 
      key == 9 || 
      key == 46 || 
      (key >= 37 && key <= 40) || 
      (key >= 48 && key <= 57) || 
      (key >= 96 && key <= 105)); 
    }) 
}) 
}; 
0

Вам необходимо включить 190 и 110 для обеих десятичных точек.

0
// Numeric only control handler 
$.fn.ForceNumericOnly = 
function() 
{ 
    return this.each(function() 
    { 
     $(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0; 

      // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY 
      return (
       key == 190 || //add this line. 190 is the keycode for a period 
       key == 110 || //and this line. 110 is the keycode for a decimal 
       key == 8 || 
       key == 9 || 
       key == 46 || 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }) 
    }) 
}; 
1

Другие пользователи довольно много ответил уже на ваш вопрос, но я хотел бы предоставить вам эту ссылку.

http://unixpapa.com/js/key.html

Я нашел, что это очень полезно при работе с событиями клавиатуры и делает их кросс-браузер, совместимый.

Надеюсь, это поможет.

Смежные вопросы