当前位置: 首页 > 面试题库 >

IE8 / Firefox行为差异

许高峻
2023-03-14
问题内容

我正在使用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。我完全被困扰了。


问题答案:

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

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



 类似资料:
  • 问题内容: 为什么Chrome中的高度大于Firefox的输入高度 问题答案: 问题本质上是。 Chrome的外观与Firefox 相似。 在输入中增加高度应该可以解决问题,尽管您应注意和匹配。 例如:。

  • 本文向大家介绍IE和Firefox之间在JavaScript语法上的差异,包括了IE和Firefox之间在JavaScript语法上的差异的使用技巧和注意事项,需要的朋友参考一下 尽管 JavaScript 历史上使用冗长而令人生厌的代码块来标的特定浏览器的时期已经结束了,但是偶尔使用一些简单的代码块和对象检测来确保一些代码在用户机器上正常工作依然是必要的。 这篇文章中,我会略述一下 Intern

  • 问题内容: 我有以下ajax调用,该调用在Firefox和Chrome中完美运行,但在IE中则不行: 我知道一个事实,所有变量都传递正确的内容,而$ .ajax确实传递所有参数/值。 这就是我遇到的错误: 日志:@错误:未定义日志:@状态:parsererror日志:@状态文本:确定 我知道IE上的缓存问题,并实施了一个随机参数来清除它。 这是我得到的JSON(我可以使用Charles看到它) 最

  • 问题内容: 我的项目使用jQuery 1.4.2。我已经将一些安全信息添加到我的AJAX标头中了……我这样做的方法是使用$ .ajaxSetup()并设置一个beforeSend函数。 据我了解,这应该在每次调用$ .ajax()时执行,对吗?它可以在Chrome,Firefox,IE9等环境中正常运行,但有时在IE7 / 8中则 不能 。 这是我称之为的地方: 我找到了一种解决方法,可以将bef

  • 问题内容: 我在singleWindow模式和IE8中运行Selenium。 如果我手动启动IE8,则将设置IE8模式,但是当我使用Selenium启动它时,使用兼容模式将模式设置为IE7。 有谁知道为什么使用Selenium启动浏览器时兼容模式不是IE8视图? 或者,如何才能完全禁用IE中的兼容模式并强制其始终使用IE8视图? 问题答案: 我给问题+1是因为这是一个非常好的问题-如何做到这一点并

  • 问题内容: 有人可以概述可用的各种Hadoop发行版之间的各种差异吗? Cloudera - http: **//www.cloudera.com/hadoop** 雅虎-http : //developer.yahoo.net/blogs/hadoop/ 以Apache Hadoop发行版为基准。 是否有 充分的理由 在标准Apache Hadoop发行版上使用这些发行版之一? 问题答案: 免责

  • null 1.存储过程:uspTestRE 从SQLCMD执行SP时,它会生成以下错误消息: 测试1:密钥冲突 然而,我的Java程序没有提供相同的行为。 测试1:密钥冲突(行为与预期一致) 测试2:除以零(不会被困住) 谁能向我解释一下,为什么SQL Server中捕获并在SP Catch块中处理的被零除错误没有被Java代码捕获?

  • 线性渐变适用于除IE8之外的所有浏览器。我添加了...这确实给了它一些渐变,但是预期的结果不同。代码:- 如何使这个梯度线性化?