当您在空格键中按住表单输入时,Internet Explorer似乎挂起了
说明问题我已经设置了一个带有3个复选框的非常简单的表单。 http://inkistudios.com/tests/checkbox.html
如果您按Tab键直到进入复选框输入。 尝试按住空格键,就好像您要使用键盘切换复选框一样。 但是在释放空格键之前按Tab键切换到另一个复选框。 这似乎导致Internet Explorer挂起,你无法拖动窗口,点击页面上的任何内容似乎检查/取消选中您选中的复选框。 所以Internet Explorer似乎还在等待第一个复选框上的空格键发布... 我在Internet Explorer 7,8和9中尝试了这一点,似乎都有相同的结果。
我想知道是否有人为此提供解决方案。 也许一些javascript会强制浏览器释放它所处的状态?
我已经尝试过关注元素或者使用jquery将焦点放在另一个元素上以防万一发生这种情况,但我尝试过的任何东西似乎都无法解决它。
答案 0 :(得分:1)
我能够使用两个版本的IE重现此行为:
单击窗口的标题栏可以切换复选框,还可以单击页面中的任意位置。我发现它会在你再次按空格后立即释放窗口。
这看起来像IE处理焦点的错误。由于窗口会在再次按下空格后立即释放,我想也许可以编写JavaScript来模拟空格键。这是我根据您的测试用例制作的脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="robots" content="none">
<meta name="viewport" content="width=960">
<title>checkbox test</title>
</head>
<body>
<h1>Checkbox test</h1>
<input name="item1" id="item1" value="1" checked="checked" type="checkbox" />
<label for="item1">item1</label><br />
<input name="item2" id="item2" value="2" checked="checked" type="checkbox" />
<label for="item2">item2</label><br />
<input name="item3" id="item3" value="3" type="checkbox" />
<label for="item3">item3</label>
<script>
<!--
var spaceDown = false;
var tabDown = false;
window.onload = function(){
document.onkeydown = function(){
if(event.keyCode == 32){ spaceDown = true; }
if(event.keyCode == 9){ tabDown = true; }
}
document.onkeyup = function(){
if(spaceDown && tabDown){
console.log("Danger, Will Fobinson!");
console.log("Simulating space bar press ...");
var e = document.createEventObject();
e.altKey = false;
e.ctrlKey = false;
e.shiftKey = false;
e.keyCode = 32;
document.fireEvent("onkeydown", e);
document.fireEvent("onkeyup", e);
}
if(event.keyCode == 32){ spaceDown = false; }
if(event.keyCode == 9){ tabDown = false; }
}
}
// -->
</script>
</body>
</html>
不幸的是,当你在IE 8中触发危险情况时(将一个复选框,空格向下,向下按下),它会增加IE的CPU使用率并弹出一个小对话框,说:
所以这不是很有用。
正如您所发现的那样,focus()和blur()方法在这个实例中似乎没有任何帮助。
所以基本上,我认为你唯一的选择是将它作为一个错误报告给IE团队,并希望他们修复它。我不确定你是怎么做的。从理论上讲,您可以在http://connect.microsoft.com/IE提交IE反馈 - 但您需要使用Windows Live ID登录,而且我不确定您是如何获得其中一个的。
除此之外......好吧,我们只希望没有太多人触发这个错误!