【问题标题】:Synchronous AJAX request focus wrong element in FirefoxFirefox中的同步AJAX请求焦点错误元素
【发布时间】:2012-11-13 11:33:45
【问题描述】:

我遇到了一个奇怪的错误,我不明白出了什么问题。在我的应用程序中处理 TAB 键时,如果我在事件处理程序中执行同步 AJAX 请求,Firefox 会将焦点放在错误的元素上。

我在这里制作了一个简单的测试用例:http://jsfiddle.net/aVeQp/18/

如果您单击结果部分然后按 Tab,前两次它可以正常工作(转到下一个单元格),但最后一次,它会将焦点放在“home”元素上。如果您将查询更改为异步,则焦点不会转到主页按钮。

var ret = $.ajax({
            type: 'POST',
            url: "",
            data: { action: "test"},
            datatype: "xml",
            async: false
            });

这在 Linux 下不会发生,但我在 Windows 7 64 位下使用 Firefox 16.0.2 时遇到错误。

我知道 ajax 调用在 jsfiddle 上无法正常工作,但该错误发生在我自己的安装中,并且 ajax 调用正确返回它只是为了显示代码和错误。我尝试使用 dhtmlx 的 AJAX 请求,同样的错误发生了。

有人知道我做错了什么吗?我已经尝试了很多东西,在这种特定情况下,firefox 似乎并不关心停止事件的传播。

编辑:似乎我在之前的测试中做错了什么,而 setTimeout() 最终是一个可行的解决方案。 但我仍然认为它最终应该在没有这种“黑客”的情况下工作。

【问题讨论】:

    标签: javascript ajax firefox


    【解决方案1】:

    我没有复制所需的环境,但我有一个可能对您有用的长期建议。尝试将 ajax 调用封装在里面

    setTimeout(function() { 你的电话在这里}, 1);

    看看进展如何。

    编辑:

    将回调绑定到 ajax

    $.ajax().done(function (data) { console.log(data); });

    【讨论】:

    • 这不会和异步 AJAX 调用一样吗?我需要等待 AJAX 调用返回才能继续
    • 这是一种特殊情况,您真的需要等到通话结束吗?或者您可以通过使用我帖子中的回调绑定来执行您需要执行的任何操作吗? (已编辑)
    • 不,我“必须”等待。至少我知道我可以使用异步 AJAX 查询并避免这个问题。但是我的应用程序不是这样设计的,我真的很想了解这里发生了什么。
    • 我不能告诉你这里到底发生了什么 :) 它与 FF 如何专门处理 e.preventDefault();但是我在另一台 PC 上测试了一个修复程序。 jsfiddle.net/aVeQp/20 在 ajax 调用后添加 'return false' 可以解决您的问题。奇怪的是,如果您在绑定内的任何位置添加 alert('x') ,它会导致完全相同的问题。
    • 这个问题让我很困惑,但似乎你不是唯一一个遇到这个问题的人。 bugzilla.mozilla.org/show_bug.cgi?id=291082 - keyDown 事件中的 e.preventDefault 存在一个挥之不去的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2014-07-18
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多