событие не определено в Mozilla Firefox для функции JavaScript? - PullRequest
6 голосов
/ 16 февраля 2009
function onlyNumeric() {   
    if (event.keyCode < 48 || event.keyCode > 57) {
        event.returnValue = false; 
    }

}

onkeypress=onlyNumneric();

В IE этот код работает нормально. Однако в Mozilla Firefox событие является неопределенной ошибкой.

Ответы [ 3 ]

16 голосов
/ 16 февраля 2009

В FF / Mozilla событие передается вашему обработчику событий в качестве параметра. Используйте что-то вроде следующего, чтобы обойти отсутствующий аргумент события в IE.

 function onlyNumeric(e)
 {
     if (!e) {
        e = window.event;
     }

     ...
 }

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

2 голосов
/ 30 ноября 2012

Или просто, назовите параметр , событие , и оно будет работать во всех браузерах. Вот пример jQueryish:

  $('#' + _aYearBindFlds[i]).on('keyup', function(event) {
  if(! ignoreKey({szKeyCodeList: gvk_kcToIgnore, nKeyCode: event.keyCode }))  this.value = this.value.replace(/\D/g, '');
  });

Этот пример позволяет вводить цифры только для полей года (внутри a для каждого селектора цикла), где ingoreKey () берет список / массив keyCode и сравнивает событие keyCode и определяет, следует ли его игнорировать перед запуском события привязки.

Клавиши, которые я обычно использую для масок / других, - это стрелки, клавиши возврата, табуляции, в зависимости от контекста / желаемого поведения.

Как правило, вы также можете использовать event.which вместо event.keyCode в большинстве браузеров, по крайней мере, когда вы используете jQuery, который зависит от event.which для нормализации событий клавиш и мыши.

Я не знаю наверняка, что происходит под прикрытием в движках js, но кажется, что Mozilla FF соблюдает более строгую область, в которой другие браузеры могут автоматически обращаться к window.event.keyCode область действия самостоятельно, когда событие явно не передается функции или замыканию.

В FF вы также можете обратиться к событию с помощью window.event (как показано в некоторых примерах здесь), который поддержал бы эту мысль.

0 голосов
/ 09 ноября 2013

Некоторые браузеры могут не поддерживать keyCode, вы должны использовать keyChar

function onlyNumeric() {   
    var chars = event.keyCode | event.keyChar;
    if (chars  < 48 || chars  > 57) {
        event.returnValue = false; 
    }

}

onkeypress=onlyNumneric();
...