$(window).keypress(function())在IE7中不起作用?

时间:2011-02-17 02:55:10

标签: javascript jquery cross-browser

这个按键事件对我来说在Chrome和Firefox中运行良好,但在IE7中根本没有被提取:

$(window).keypress(function(e) {
    alert('hello world');
});

有没有人知道IE7的替代品?

或者它在我的JavaScript中更高的错误意味着它在IE7中没有被提取 - 在这种情况下,我该如何调试它?我在IE中打开了脚本错误,但没有弹出任何内容。

4 个答案:

答案 0 :(得分:27)

IE不支持window上的关键事件。

将其放在document上。

$(document).keypress(function(e) {
    alert('hello world');
});

答案 1 :(得分:2)

目前我没有IE7来测试它,但我相信你必须将事件处理程序分配给$(document)而不是$(window)。类似的东西:

$(document).keypress(function(e) {
    alert("hello world");
});

答案 2 :(得分:-1)

有几件事要尝试:

1:将您的事件代码包装在document.onready事件中,如下所示:

jQuery(function()
{
    $(window).keypress(function(e)....
});

这样,在DOM加载完成之前,您的事件才会被附加。

2:将您的活动附加到正文或文档而不是窗口:

jQuery(function()
{
    $("body").keypress(function(e)....
    $(document).keypress(function(e)....
});

(我没有理由认为这会起作用,这是我在事件由于某种原因没有一直回到文档或窗口时所做的事情。)

答案 3 :(得分:-2)

我也遇到过这个问题。我发现 IE7在其事件对象的实现中没有keyChar成员。因此,它尝试评估event.keyChar,获取null并且什么都不做。相反,keyCode是不明确的,返回ascii keyChar或被按下的键的键码...呃。由于我必须捕获与字符绑定的特殊键和键,这是我的解决方案。

的onkeydown
否定keyCode并保存在持久对象中

myObject.kSave=-event.keyCode;

为什么?因为此时你不知道密钥是字符还是特殊密钥!!!

onkeypress事件
如果密钥是特殊密钥,则onkeypress事件可能不会触发。 出于这个原因,我的策略使用onkeyup来处理特殊键和控制字符,并使用onkeypress来处理控制字符以外的字符。 当键是一个字符时,event.keyChar包含该字符,并且其值大于0.但是,由于IE7没有event.keyChar成员,因此使用event.keyCode作为字符。您可以通过阻止控制字符的默认行为并将处理推迟到onkeyup来强制将所有控制字符(例如,enter,esc,tab等)作为特殊键处理。要表示已处理某个字符,我们必须将保存的对象设置为我们找到的字符。

var ch = (event.keyChar == null) ? event.keyCode : event.keyChar;
if (ch >=32) {//ch is a character and not a control character
  myObject.kSave = ch; //tells onkeyup that the key was handled
  event.preventDefault(); //don't let default processing mess with your handler
  switch(ch) {
  //your character handler goes here
  }
} else if (ch > 0) {//ch is a control character
  event.preventDefault();
}

的onkeyup
将保存的值添加到event.keyCode。如果总和为零,则onkeypress事件不会 处理按键,因为按下的键是特殊键或控制字符。 当总和是正数时,没有什么可做的,因为键是一个字符 并且onkeypress事件处理程序已经处理好了。

if (myObject.kSave+event.keyCode == 0) {//this is a special key or control character
  event.preventDefault();
  switch(event.keyCode) {
  //handle special keys here
  }
}

最后一点,如果您不希望默认处理程序弄乱您的事件处理程序,请在事件处理程序中调用event.preventDefault()。

相关问题