繁体   English   中英

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

[英]$(window).keypress(function()) does not work in IE7?

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

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

有谁知道IE7的替代品?

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

IE不支持window上的键事件。

而是将其放在document

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

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

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

有几件事要尝试:

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

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

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

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

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

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

我也遇到过这个问题。 我发现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()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM