我能够使用两个版本的 IE 重现此行为:
- IE 8(版本 8.0.7601.1754)。
- IE 9(版本 9.0.8112.16421,更新版本 9.0.4)
单击窗口的标题栏会切换复选框,此外还可以单击页面中的任何位置。我发现一旦你再次按下空格它就会释放窗口。
这看起来像是 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 登录,我不确定您如何获得其中之一。
除此之外......好吧,我们只希望没有太多人触发这个错误!