在IE8中按Enter键会导致我的应用程序进入登录页面

pil*_*rth 1 javascript java gwt internet-explorer-8

在IE8中运行时,我的GWT应用程序出现了一个奇怪的问题.如果我在应用程序的任何位置点击回车键,则应用程序就像用户已注销并且用户返回到登录页面.

在兼容模式下运行的Firefox,IE7或IE8中不会发生这种情况.

我返回登录页面的事实意味着浏览器丢失了会话信息,正在发出服务器请求,然后被重定向到登录页面.

如果我拦截窗口小部件中的keydown事件并调用preventDefault,则会停止该行为.

可能导致这种情况的任何想法?

pil*_*rth 6

似乎在IE8中如果不指定按钮类型,则按钮被创建为提交按钮.在FF中,情况并非如此.HTML4标准规定,如果未指定按钮类型,则默认为提交按钮(IE为+1!)

在IE8中,如果你在页面上放置一个提交按钮IE8似乎在文档级别创建一个伪/隐藏/秘密表单组件.

现在,如果您在页面上放置任何其他组件,则会将它们视为属于表单并按下该组件中的Enter将触发提交按钮上的click事件.

可以使用以下简单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>
Run Code Online (Sandbox Code Playgroud)

我的修复是简单地将GWT ui.xml文件中的按钮类型指定为type ="button".这符合HTML4标准,该标准建议始终指定按钮类型以确保所有浏览器的兼容性.