一尘不染

IE8 / Firefox行为差异

jsp

我正在使用JSP编写登录页面。它非常简单,但是在IE8和Firefox中的行为却有所不同(令人惊讶的是)。我尚未测试这是其他浏览器。

我可能可以使用一些Javascript进行修复,但是在我寻求解决方法之前,我一直在寻找有关该行为的更多信息,以期获得更清洁的修复程序并避免将来出现此问题。

服务器端生成的HTML代码段是这样的:

<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的静态副本上传到某个地方。(如果是最后一个,我可以推荐一个好的网站或服务来进行此操作,因为实际的网站仍在开发中,尚不支持Web。)谢谢!

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

编辑2: 我完全删除了checkKeyPress方法以查看是否是引起问题的原因,并且它什么也没有改变。

完整的源代码在这里。焦点随机跳转到的div位于正文顶部的两个“全局导航”注释之间。仍然不知道为什么会这样。为了查看焦点是否以某种方式被重置,我在焦点正在随机跳转到的区域上方添加了另一个div,希望焦点会开始跳转到新的div。没有。仍然将焦点切换到其中包含图像的div。我完全被困扰了。


阅读 239

收藏
2020-06-10

共1个答案

一尘不染

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

您的登录表单位于“ dropmsg0”
div中,导致其每6秒短暂隐藏一次并重新显示。隐藏时,这些文本框在IE8中失去焦点。我将重命名div以便排除在代码之外,或者将代码脚本修改为在只有一个dropmsg
div时不运行。

2020-06-10