我创建使用JavaScript网站。 JS部分的目的是为了我自己的键盘处理程序附加到某些文本字段。 我设法缩小问题,因为这小提琴一样简单的代码:
http://jsfiddle.net/k9s3n/1/
在Firefox,Opera和Chrome浏览器,在关键代码显示一个警告框,键入任何三个字段结果的一个字符。 在Internet Explorer(IE8在我的情况,这是最低的版本,我通常支持),但是,只有input3
工作正常-也就是说,它是释放一个键时显示该对话框的唯一领域。 试图在其他两个框键入没有给出结果,它只是记录在控制台中的错误:
keyCode is null or isn't an object
(不知道该错误信息是正确的,我把它翻译从我的母语)。
看来只有第三个解决方案工作,无论浏览器,但在我的情况我都用的第一个或第二个。
我已经创造了另一个捣鼓进一步调查:
http://jsfiddle.net/bSdaJ/
这两个按钮的点击时,使消息框中显示。 在Firefox,Opera和Chrome浏览器,盒子说:“[对象的MouseEvent]”,而在IE它说:“不确定”。
我能做些什么? 感谢提前任何帮助。
PS作为由第一小提琴表示,一切如果我使用内联事件处理工作正常。 然而,我在这个项目的目标是完全独立的HTML和JS,所以我不能使用。 我做了一个朋友和我想的HTML部分是普通的,明确的标记代码。
你不应该使用DOM 0事件(通过HTML属性附加的事件)。 你应该用事件侦听器,使用连接element.addEventListener
在W3C的浏览器和element.attachEvent
在IE中。 如果你正在建设一个大型的网站,你应该使用JS框架,但是这是一个不同的问题,你也没问。 一个框架(最流行的是jQuery的)将提供抽象的方法来做到这一点,但在没有之一,这里有一个简单的功能做跨浏览器。
function addEvent(element,evName,fn) {
if (element.addEventListener) {
element.addEventListener(evName,fn,false);
} else if (element.attachEvent) {
element.attachEvent('on'+evName,function(e) {
fn(e || window.event);
});
}
}
这个简单的功能使用功能检测,以标准化浏览器之间的不同事件的行为。 IE使用不同的侦听功能与不同的签名,和IE也并不表示需要处理程序以接收所述事件对象作为参数W3C规范; 相反,它设置全局window.event`财产。
实例: http://jsfiddle.net/k9s3n/3/
还要注意的是IE浏览器和W3C的浏览器有不同的做法event.keyCode
属性(在其他浏览器的做法是正确的)。
尝试这个:
function clickHandler(e) {
if(!e)
e = window.event;
alert(e);
}
尝试这个:
function funcToCall(e)
{
//alert('here');
var keycode;
if (window.event)
{
if (window.event.keyCode == '112') { // F1 was pressed
// call your methods in this area
window.event.returnValue = false;
return false;
}
}
else if(e)
{
if (e.which == '112') { // F1 was pressed, search for other keycodes
// call your methods in this area
e.preventDefault();
return false;
}
}
}
呼吁您的文本字段:
onKeyDown="funcToCall(event)"