【问题标题】:jquery change() on input box in IE6 - can't remove focusIE6中输入框上的jquery change() - 无法移除焦点
【发布时间】:2010-02-10 17:50:42
【问题描述】:

我有一个结帐页面,该页面不显眼地检查客户是否曾向我们订购过。

在他们填写了他们的电子邮件地址并关注下一个框后,我会查找电子邮件并显示一个“欢迎回来”类型的内容,并带有选项以记住他们的详细信息。

我在 IE6 中遇到问题 - 每当输入框失去焦点时,ajax 函数会正常运行,但焦点会返回输入框。这意味着,每当客户尝试点击离开电子邮件输入框时,他们都会不断返回到该输入框并且无法继续。

有没有办法阻止这种行为?

  // check when the e-mail box is changed
  $("#email").change(function(event) {
    $.ajax({
        type: "POST",
        url: "procBasketEmailLookup.php", 
        data: $("#checkoutform").serialize(),
        success: function(response) {
            $('#emailstuffOutput').hide();
            $('#emailstuffOutput').html(response);
            $('#emailstuffOutput').show('slow');
        }
        });
        // DON'T ALLOW THE PAGE TO SUBMIT
    return false;
    });

【问题讨论】:

  • 如果不从脚本返回“false”会怎样?
  • @Pointy 然后表单将提交并重定向到操作页面。
  • @vivin 为什么去掉“return false”会提交表单?
  • @Mattias Argh,我的错 - 我以为他在使用 submit()。忽略我之前说的。
  • 删除了 return false 并且工作正常。我想我已经从同一页面上的其他一些功能复制了它,这些功能会提交并忘记删除它。谢谢!

标签: jquery internet-explorer focus onchange


【解决方案1】:

试试:

jQuery("#emailInputField").blur();

将其放入您的 AJAX 调用的成功处理程序中,甚至放入您的 change() 处理程序中。我无法从您的问题中判断是 AJAX 调用导致了问题,还是 change() 处理程序。但这应该工作。

编辑

关于Pointy的评论。使用blur() 会打乱制表符顺序。此外,Pointy 和 Mattias 指出您正在从处理程序返回 false。您无需这样做,因为您不在 submit() 处理程序中。 return false; 也可能是您的问题的原因。

【讨论】:

  • 调用“blur()”的问题是它会弄乱“tab 序列”。如果用户进行了更改,然后使用“tab”转到下一个字段,调用“blur()”可能会导致浏览器将焦点重置到页面上的某个或多或少的随机点。
  • 好点;无论如何,我正在更新答案 - 看起来它可能与他从 change() 处理程序返回的 false 有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2013-04-02
  • 2019-11-30
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多