请有人帮助一个非常绝望和厌倦的新手。我到处寻找答案,但无济于事。
我想捕获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中没有任何作用!
答案 0 :(得分:4)
没有任何作用,因为您将参数命名为evt
而不是event
。在您的代码中,window.event
和event
都指代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;
它似乎适用于两种浏览器。