2013-09-18 3 views
0

В моем текущем коде прямо сейчас я могу ввести только целые числа. Я хочу добавить «+» и скобку «()». Как я могу настроить свой код?Как разрешить «+» и «()» в моих атрибутах только для ввода чисел?

<script type="text/javascript"> 
    $(".numeric").keydown(function (event) { 
     var num = event.keyCode; 
     if ((num> 95 && num < 106) || (num > 36 && num < 41) || num == 9) { 
      return; 
     } 
     if (event.shiftKey || event.ctrlKey || event.altKey) { 
      event.preventDefault(); 
     } else if (num != 46 && num != 8) { 
      if (isNaN(parseInt(String.fromCharCode(event.which)))) { 
       event.preventDefault(); 
      } 
     } 
}); 
</script> 
+2

Как вы разрабатываете код для чисел? Почему вы не можете сделать тот же процесс? – SmokeyPHP

+0

проверить эту ссылку - https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent – Elen

ответ

1

Из ссылки на таблицу - https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent:

DOM_VK_OPEN_PAREN 0xA8 (168) Open parenthesis ("(") key. 
DOM_VK_CLOSE_PAREN 0xA9 (169) Close parenthesis (")") key. 
DOM_VK_PLUS   0xAB (171) Plus ("+") key. 

Так ваш чек будет:

if ((num> 95 && num < 106) || (num > 36 && num < 41) || num == 9 || (num >= 168 && num <= 169) || num == 171) 

EDIT:

Wi й некоторой помощи, я в конце концов создал регулярное выражение для работы этих требований:

http://jsfiddle.net/elen/R8M7K/7/

код:

$(".numeric").keydown(function (event) { 
    var num = event.keyCode; 
    if(event.shiftKey) num = 's_'+num; 
    var pattern2 = new RegExp(/^(9[6-9]|10[0-5]|3[7-9]|40|9|s_57|s_48|171|107|s_187|)$/); 
    if (pattern2.test(num)){ 
     return; 
    } 
    if (event.shiftKey || event.ctrlKey || event.altKey) { 
     event.preventDefault(); 
    } else if (num != 46 && num != 8) { 
     if (isNaN(parseInt(String.fromCharCode(event.which)))) { 
      event.preventDefault(); 
     } 
    } 
}); 
+0

FYI, когда вы не имеете дело с диапазонами, вы можете сократить код с помощью регулярного выражения, например, конец примера кода выше может быть: '/^(9 | 168 | 169 | 171) $ /. test (num)' – SmokeyPHP

+0

@SmokeyPHP да очень хорошо, но, к сожалению, я не очень хорошо разбираюсь в regex =) лучшее, что я мог придумать попробуйте покрыть все вышеперечисленные проверки: '/^(9 | 168 | 169 | 171 | [0-9 \ (\) \ +]) + $ /', но это не работает для '(', ')' когда нажатие клавиши «Shift». Если вы можете улучшить его, я добавлю к своему ответу. – Elen

+0

Скобки уже покрыты '168 | 169' - это будет просто' if ((num> 95 && num <106) || (num> 36 && num <41) ||/^ (9 | 168 | 169 | 171) $ /. Test (num)) ' – SmokeyPHP

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