2015-04-26 2 views
0

У меня есть несколько текстовых полей, которые должны принимать только числа, меньшие, чем 5. Когда пользователь вводит цифру, некоторые другие события должны иметь место. Событие Keypress работает очень хорошо, за исключением того, что когда пользователь входит в текстовое поле 1, событие запускается один раз (что правильно), и когда он последовательно входит в текстовое поле 2, событие запускается дважды (это правильно?) - один раз для текстового поля 1 и в другое время для текстового поля 2. И если он возвращается и входит в третий номер, событие запускается трижды.Jquery keypress cascading

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

function validateInputKeyPress(e){ 

var element = document.getElementById(e.name); 

$("body").keypress(function(e) { 
    var keycode= e.keyCode; 
    alert(e.name); // this tells me which textbox 
    if (keycode!=8){ //allow backspace 
     if (keycode<49||keycode>53) { //if not a number less than 6 
      return false; //disable key press 
     } 
    } 
    handleQtyChange(e.name, keycode); 
}); 

}

ответ

0

Вы связать событие на body. Вы должны привязать событие к входам. Вы можете использовать stopPropagation, чтобы остановить пузыри событий.

$("body").on('keypress', ':text', function(e) { 
    e.stopPropagation(); 

Это будет связывать события только текстовые поля, а не body.

Код: https://api.jquery.com/on/

+0

для меня сценарий выглядит по-другому. Он говорит, что событие, отснятое на счету, зависит от количества символов в текстовом поле, а не от числа предков, пожалуйста, исправьте меня, если я ошибаюсь. – Imad