2013-11-30 4 views
0

Я использую JQuery для проверки текстового поля, чтобы разрешить только числа. Проблема в том, что она позволяет сдвинуть + специальные карыграторы. Я использовал аналогичный код для проверки имени, за исключением нескольких изменений, но не допускает никаких специальных символов. Я confused.My кодJQuery Validate Text Box value

if(e.keyCode==46 || e.keyCode==8|| e.keyCode==9 || e.keyCode==37 || e.keyCode==39) 
{ 
// do nothing allow 
} 
else if(e.keyCode>=48 && e.keyCode<=57) 
{ 
// do nothing allow 
} 
else 
{ 
    e.preventDefault(); 
} 

Вот мой Fiddle. На скрипке первое поле ввода не допускало специальных символов, таких как @,#,$,%. Но второй позволяет использовать специальные символы. Я проверил специальные символы в заявлении If. Правильно ли моя логика? Что-то не так?

+0

Я думаю, все в порядке. Однако вы должны проверить на стороне сервера значения, которые вы получаете от пользователя. Javascript в браузере можно отключить, и, следовательно, злонамеренный пользователь может отправить вам значения, которые нарушают вашу логику. Поэтому вы должны проверить их на стороне сервера, прежде чем они будут сохранены в db. – Christos

+0

В HTML5 вы можете использовать атрибут pattern, который может быть проще http://www.w3schools.com/tags/att_input_pattern.asp –

+0

Если я удалил 'e.keyCode> = 48 && e.keyCode <= 57' и проверил для других символов не допускается клавиша переключения. Ясно, что проблема заключается в 'e.keyCode> = 48 && e.keyCode <= 57' –

ответ

0

Это должно работать: Попробуйте

http://jsfiddle.net/cH3zP/6/

var schk=0; 
$('#phone').keyup(function(e){ 
if(e.keyCode==16) 
{ 
    schk=0; 
} 
}); 
$('#phone').keydown(function(e){ 
if(e.keyCode==16) 
{ 
    schk=1; 
} 
}); 

Что им делать в моем коде, когда пользователь нажимает на кнопку я просто изменить значение глобальной переменной длиной schk к 1 .Как, как пользователь держите его нажатым, он останется 1.

Когда пользователь покидает клавишу переключения, он снова инициализируется 0, позволяя его вход.

Зачем работать на 1-й вход, а не на 2-й в вопросе скрипки?

В первом поле ввода вы не разрешаете отображение чисел. shift + 1 запускает тот же код клавиши, что и при нажатии 1.So, если вы набираете 1 или! код ключа будет таким же 49.

+0

Если вы объясните, почему, тогда я сделаю +1 этого –

+0

. Что я должен объяснить? мой код? Или почему ваш не работает? – Zword

+0

Какая ошибка в моем коде? и почему это не работает и как работает ваш? как он отличается от моего? –

-1

Я думаю, изменив первую функцию связывания событий от keydown к keypress решает эту проблему:

Посмотреть http://jsfiddle.net/cH3zP/5/

$('#phone').keypress(function(e){ 
if(e.keyCode==46 || e.keyCode==8|| e.keyCode==9 || e.keyCode==37 || e.keyCode==39) 
{ 
// do nothing allow 
} 
else if(e.keyCode>=48 && e.keyCode<=57) 
{ 
// do nothing allow 
} 
else 
{ 
    e.preventDefault(); 
} 
}); 
+0

Он ничего не отображает – Zword

+0

@Zword ничего не отображает? связь? Я только что проверил его, и я могу ввести значения в текстовые поля в качестве исходного вопроса. – anishthecoder

+0

Он блокирует все –

0

здесь обновленного код

var reg = new RegExp('^\d+(\.\d{1,2})?$'); 
$('#phone') 
.keydown(function(evt){ 
    var charCode = evt.which || evt.keyCode; 
    var charStr = String.fromCharCode(charCode); 
    if (evt.keyCode == 46 || evt.keyCode == 8 || evt.keyCode == 9 || evt.keyCode == 27 || evt.keyCode == 13 || 
     // Allow: Ctrl+A 
      (evt.keyCode == 65 && evt.ctrlKey === true) || 
     // Allow: home, end, left, right 
      (evt.keyCode >= 35 && evt.keyCode <= 39) || charCode == 46) { 
      // let it happen, don't do anything 
      return; 
     } 
     else if (!reg.test(charStr)) { 
      evt.preventDefault(); 
     } 
     else { 
     } 
    }); 

Надеется, что это помогает