0

пытается предотвратить ввод нецифровых символов в текстовое поле. мой код проверяет символы, но не останавливает его добавление в текстовое поле.stop event on keyup in mootools не работает

мой код:

var isNumberKey = function(e){ 
    //alert(e.which); 
    if (e.which > 31 && (e.which < 48 || e.which > 57)) 
     return false; 
    return true; 
} 

var isBackSpaceKey = function(e){ 
    return e.which == 8; 
} 

var isArrowKey = function(e) { 
    return e.which >= 37 && e.which <= 40; 
} 

var inputs = $$('.numberOnly'); 
inputs.addEvent('keyup', function(e){ 
    console.log(e.which); 
    if (!isNumberKey(e) && !isBackSpaceKey(e) && !isArrowKey(e)){ 
     e.stop(); 
     return false; 
    } 
    return true; 
}); 

HTML:

<input name="t1" type="text" class="numberOnly" id="t1"/> 

ответ

1

вы должны использовать keydown событие вместо keyup. Я хотел бы сделать это следующим образом:

var inputs = $$('.numberOnly'); 
inputs.addEvent('keydown', function(e){ 
    if (e.code >= 48 && e.code <= 57){ 
     return true; 
    } 
    e.stop(); 
    return false; 
}); 

http://jsfiddle.net/TsAkb/

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

EDIT:

Может быть, вы хотите, чтобы ключ "на вкладку", то " введите «key» и «backspace» too = P

+1

+1 для keydown, как для тестирования, это выглядит разумно для меня: '(e.key && e.key.test (/ ([\ d] | Закладка | забой | enter | left | right | up | down) /)) || e.stop(); ' –

+0

:' (e.key && e.key.test && e.key.test (/ ([\ d] | вкладка | backspace | delete | enter | left | right | up | вниз) /)) || e.stop(); '- нужна дополнительная проверка, так как некоторые num pad клавиши не нормализуются к строкам с помощью mootools, а вызов' .test' будет небезопасным. также может быть 'e.key && e.key.length && ...' или он может получить канал, напечатанный в строке, чтобы быть в безопасности. –

+0

http://jsfiddle.net/dimitar/TsAkb/2/ -> необходимо добавить проверку состояния переключения и преобразовать e.key в строку, если она указана как номер (num pad). –