java - 在 IE8 中按回车键会导致我的应用程序转到登录页面

标签 java javascript gwt internet-explorer-8

在 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/

相关文章:

javascript - jQuery 隐藏跨度值超过范围 slider 值的部分

javascript - 动态谷歌代码美化不起作用

javascript - 添加在新站点中返回历史记录的可能性

java - (类型错误) : Blob is not a constructor

Java/GWT/MySQL : connection refused?

java - 如何使用 JSF 和 Primefaces 在数据表中渲染一次面板网格?

java - 如何在 Java 中打断长行

gwt - 可以使使用 ImageBundle 的 GWT 图像 Sprite 在 IE7 和 IE6 中工作吗?

java - 使用变量而不是长语句?

java - 从 Web 应用程序调用 Java native 接口(interface)