javascript事件.在FireFox 3.6.25中,keyCode不能处理keydown、keypress或ke

javascript event.keyCode doesn't work on keydown, keypress or keyup events in FireFox 3.6.25

本文关键字:keydown 处理 不能 keypress ke keyCode FireFox 事件 javascript      更新时间:2023-09-26

请帮助一个非常绝望和疲惫的新手。我已到处寻找答案,但一无所获。

我想捕获keyCode/charCode来测试是否按下了输入键(我一直在使用keydown,但只要我得到一些工作,我就不会感到烦恼)。我已经尝试了所有可能的解决方案,它在IE, Safari, Chrome和Opera中都能正常工作,但在FireFox 3.6.25(最新)中却不行?!我知道事件肯定是触发的,因为我可以从我调用的函数中显示一个简单的警报框,但至于声明一个变量来保存事件的内容。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);
}

什么都不能用!

没有任何作用,因为您将参数命名为evt而不是event。在您的代码中,window.eventevent都引用了Firefox中不存在的window.event

您应该首先规范化事件,例如使用

var event = evt || window.event;

或将参数从evt重命名为event(然后删除上面的var)。

还请注意,当您从内联事件处理程序调用函数时,如果您想访问它,则必须将事件对象传递给它。

这是我现在拥有的代码,它在所有五个主要浏览器中都可以完全运行:

我现在按如下方式调用函数:

<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()

希望这对其他人有帮助!

尝试使用

var keycode = evt.charCode;