在 IE8 中运行时,我的 GWT 应用程序出现了一个奇怪的问题。如果我在应用程序的任意位置按下回车键,应用程序的行为就像用户已注销一样,用户将返回到登录页面。
在以兼容模式运行的 Firefox、IE7 或 IE8 中不会发生这种情况。
我返回到登录页面的事实意味着浏览器丢失了 session 信息,正在发出服务器请求,然后被重定向到登录页面。
如果我拦截小部件中的 keydown 事件并调用 preventDefault,那么这将停止该行为。
知道是什么原因造成的吗?
最佳答案
似乎在 IE8 中,如果您不指定按钮类型,按钮将被创建为提交按钮。在 FF 中,情况并非如此。 HTML4 标准规定,如果未指定按钮类型,则应默认为提交按钮(IE +1!)
在 IE8 中,如果您在页面上放置一个提交按钮,IE8 似乎会在文档级别创建一个伪/隐藏/ secret 表单组件。
现在,如果您将任何其他组件放在页面上,它们将被视为属于表单,并且在该组件中按下回车键将触发提交按钮上的点击事件。
可以使用以下简单的 HTML 演示此行为。
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>IE8 Test</title>
</head>
<body>
<button id="b2" type="button" value="button">Button type</button>
<button id="b1">No type</button>
<button id="b3" type="submit" value="submit">Submit type</button>
<input type="text" value="text!">
<script>
document.getElementById('b1').onclick = function (e) {
alert("You Clicked Button Number 1");
};
document.getElementById('b2').onclick = function (e) {
alert("You Clicked Button Number 2");
};
document.getElementById('b3').onclick = function (e) {
alert("You Clicked Button Number 3");
};
</script>
</body>
</html>
我的解决方法是简单地将 GWT ui.xml 文件中的按钮类型指定为 type="button"。这符合 HTML4 标准,该标准建议始终指定按钮类型以确保跨所有浏览器的兼容性。
关于java - 在 IE8 中按回车键会导致我的应用程序转到登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903741/