【问题标题】:IE8/Firefox Behavioral DifferenceIE8/Firefox 行为差异
【发布时间】:2009-08-13 17:05:28
【问题描述】:

我正在开发以 JSP 形式编写的登录页面。它非常简单,但在 IE8 和 Firefox 中表现不同(那里很令人惊讶)。我还没有测试过这是其他浏览器。

我可能会使用一些 Javascript 进行修复,但我一直在寻找有关该行为的更多信息,然后才实施一种解决方法,希望能够更清晰地修复并避免将来出现此问题。

有问题的服务器端生成的 HTML sn-p 是这样的:

<form name="member_session_info" method="post" autocomplete="off" action="/membersession" onsubmit="return validate_form()" >
      <input type="hidden" id="memberSessionAction" name="memberSessionAction" value="" /> 
      <input type="hidden" name="homePage" value="/2009/aas/aas_home.jsp" />
      <input type="hidden" name="memberLandingPage" value="/2009/aas/aas_member_landing.jsp" />
      <input type="hidden" name="memberProfilePage" value="/2009/aas/aas_member_profile.jsp" />
      <input type="hidden" name="passwordRecoveryPage" value="/2009/aas/aas_password_recovery.jsp" /> 

      <input id="uname" class="text xsmall right" name="username" value="USERNAME" onclick="checkClickUser()" onKeyPress="checkKeyPress(event, 'login', sendProfile)" style="width: 220px;" type="text">

      <input id="pass" class="text xsmall right" name="password" value="PASSWORD" onclick="checkClickPassword()" onKeyPress="checkKeyPress(event, 'login', sendProfile)" style="width: 220px;" type="password">

      <a href="javascript:sendProfile('startPasswordRecovery');" class="xsmall">FORGOT PASSWORD</a>
</form>

支持它的 Javascript 是:

<script type="text/javascript" language="JavaScript">

function validatePost(code, doAlert)
{
    postValid = true;
    return postValid;
}

function sendProfile(action)
{
    document.getElementById("memberSessionAction").value = action;
    document.member_session_info.submit();
    return false;
}

function initializePage()
{
}

function validate_form()
{
    return false;
}

function checkClickUser()
{
    var username;

    username = document.getElementById("uname").value;

    if (username == "USERNAME") {
        // Clear the field since it's the first time
        document.getElementById("uname").value = "";
    }

    return true;
}

function checkClickPassword()
{
    var username;

    username = document.getElementById("pass").value;

    if (username == "PASSWORD") {
        // Clear the field since it's the first time
        document.getElementById("pass").value = "";
    }

    return true;
}

function checkKeyPress(event, object, func)
{
    var keycode;
    if (window.event) keycode = window.event.keyCode;
    else if (event) keycode = (event.which) ? event.which : event.keyCode;
    else return true;

    if ((keycode == 13)) // check for return
    {
        func(object);
        return true;
    }
    return true;    
}

</script>

基本症状是这样的: 如果您使用制表符从表单中的用户名字段导航到密码字段,则密码会在 FF 中正确突出显示并清除,但在 IE8 中不会。在 IE8 中,跳到密码字段将光标移动到密码框的最开头,保留默认值 (PASSWORD),而不是清除它。

知道为什么会发生这种情况吗?这是一个已知的 IE8 错误或固有缺陷,我只需要破解,还是我可以在某处添加一点代码来更正确地处理 IE8?

如果问题在我的描述中不明确,我可以尝试阐明或只是抛出屏幕截图/视频剪辑,或在某处上传 HTML 的静态副本。 (如果是最后一个,我可以推荐一个好的网站或服务来做这件事,因为实际的网站仍处于开发阶段,还不能在网络上使用。)谢谢!

编辑:将 onclick 属性更改为 onfocus 解决了这个问题,但又带来了另一个问题(请参阅我的评论 @David)。这可能与 checkKeyPress 的编写方式有关吗?这是我从网站其他地方借来的功能。特别是我想知道更改其返回语句是否可以解决问题。也许它根本不应该返回真/假/任何东西?

编辑 2: 我完全删除了 checkKeyPress 方法以查看是否是导致问题的原因,但它没有任何改变。

完整来源是here。焦点随机跳转到的 div 是两个“全局导航”cmets 之间的一个,位于身体的最顶部。仍然不知道为什么会这样。为了查看焦点是否以某种方式刚刚被重置,我在焦点随机跳转到的那个 div 上方添加了另一个 div,期望焦点开始跳转到新的 div。它没有。它仍然将焦点切换到其中包含图像的 div。我完全被迷惑了。

【问题讨论】:

    标签: html jsp servlets internet-explorer-8 focus


    【解决方案1】:

    如果您将检查放在 onfocus 而不是 onclick 中会怎样?从技术上讲,Tab 键并不是一个点击。

    【讨论】:

    • 好点 - 我没有写原始页面,我只是更新它。我会试一试。
    • 好的,这样解决了一个问题,但又暴露了另一个问题:现在,当在任一字段(在 IE8 中)输入时,输入将随机失去焦点,所以我实际上必须单击返回以保持打字。
    • @Matt:我使用了您提供的代码,将两个输入字段的 onclick 更改为 onfocus,我在这里没有看到您失去焦点的问题。
    【解决方案2】:

    由于失去焦点似乎每 6000 毫秒发生一次,我将责任归咎于 /js/qm_scripts.js 中的 expandone()/contractall()。

    您的登录表单位于“dropmsg0”div 中,导致它被短暂隐藏并每 6 秒重新显示一次。隐藏时,文本框在 IE8 中失去焦点。如果只有一个 dropmsg div,我要么将 div 重命名为从代码中排除,要么将代码脚本修改为不运行。

    【讨论】:

    • +1 天哪,你成功了。甚至不要问我为什么 qm_scripts.js 包含 ProHTML 代码脚本。你不想知道。
    猜你喜欢
    • 2010-12-09
    • 2012-10-20
    • 1970-01-01
    • 2014-01-11
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多