javascript event.keyCode не работает с событиями keydown, keypress или keyup в FireFox 3.6.25 - PullRequest
3 голосов
/ 23 декабря 2011

Пожалуйста, помогите кому-нибудь очень отчаянному и утомленному новичку. Я везде искал ответ, но безрезультатно.

Я хочу захватить keyCode / charCode, чтобы проверить, была ли нажата клавиша ввода (я использовал keydown, но я не суетюсь, пока что-то работает) Я испробовал все мыслимые решения, и они отлично работают в IE, Safari, Chrome и Opera, но НЕ В FireFox 3.6.25 (последняя версия) ?! Я знаю, что событие определенно инициируется, поскольку я могу отобразить простое окно оповещения из вызываемой функции, но что касается объявления переменной, содержащей содержимое event.keyCode, то это совсем другой вопрос!

Код моей формы в основном ...

<form method="post" name="giftaidform" onsubmit="javascript:return validateForm();" action="../scripts/form-to-email.php">
<table width="500" border="0" align="center" cellpadding="5" cellspacing="0">
  <tr>
    <td width="180" align="right">Forename:</td>
    <td align="left"><input name="forename" type="text" size="30" maxlength="30" onfocus="javascript:setUnchecked(this);" onkeydown="javascript:testForEnter(this);" onblur="javascript:isValidName(this);"></td>
  </tr>

и так далее ...

Что касается моей функции "testForEnter" ...

function testForEnter(obj) {
// store code of key that was pressed
var keyCode = obj.keyCode;
alert(keyCode);
// if the enter key was pressed then prevent default action
if (keyCode == 13) {
    if(event.preventDefault) event.preventDefault();
    event.returnValue = false;
}
 }

Я пробовал различные другие формулировки, включая obj.charCode и тому подобное, как показано ниже?!

function checkKey(evt) {
  var keyID = (window.event) ? window.event.keyCode : event.which;
  alert(keyID);
}

Ничего не работает в FireFox!

Ответы [ 3 ]

4 голосов
/ 23 декабря 2011

Ничего не работает, потому что вы назвали параметр evt, а не event. В вашем коде window.event и event оба ссылаются на window.event, которого нет в Firefox.

Сначала следует нормализовать событие, например, используя

var event = evt || window.event;

или переименуйте параметр с evt на event (а затем сбросьте var выше).

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

2 голосов
/ 23 декабря 2011

Это код, который у меня сейчас есть, и он полностью работает во всех пяти основных браузерах:

Теперь я вызываю функции следующим образом:

<input name="forename" type="text" size="30" maxlength="30" onkeydown="testForEnter(this,event);" onblur="isValidName(this);">

Моя функция выглядит следующим образом:

// testForEnter() disables the enter keypress on all form objects except for submit button
// this function works in IE, chrome, safari, opera and firefox
function testForEnter(obj,evt) {
    var keyCode = evt.keyCode;
    var objType = obj.type;
    if ((keyCode == 13) && (objType != "submit")) {
        evt.returnValue = false;
        evt.stopPropagation(); // this line added for firefox
        if(evt.preventDefault) evt.preventDefault();
}
} //end of testForEnter()

Надеюсь, это поможет кому-то еще!

1 голос
/ 18 октября 2012

Попробуйте использовать

var keycode = evt.charCode;

Кажется, он работает в обоих браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...