javascript event.keyCode不适用于FireFox 3.6.25中的keydown,keypress或keyup事件

时间:2011-12-22 22:57:21

标签: javascript event-handling keyboard

请有人帮助一个非常绝望和厌倦的新手。我到处寻找答案,但无济于事。

我想捕获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 个答案:

答案 0 :(得分:4)

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

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

var event = evt || window.event;

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

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

答案 1 :(得分:2)

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

我现在调用函数如下:

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

希望这有助于其他人!

答案 2 :(得分:1)

尝试使用

var keycode = evt.charCode;

它似乎适用于两种浏览器。