2012-11-13 16 views
0

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

我设法生产出一个简单的测试案例在这里:如果你点击的结果的一部分,然后按Tab键,前两次它工作正常http://jsfiddle.net/aVeQp/18/

(进入下一个单元格),但是最后一次它将重点放在“家”元素上。如果将查询更改为异步,则焦点不会转到主页按钮。

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()是最终的工作解决方案。 但我仍然认为它应该最终没有这个“黑客”。

回答

1

我没有所需的环境进行复制,但我有一个可能为您工作的长远建议。尝试在内部包装ajax呼叫

setTimeout(function(){your call here},1);

看看它是怎么回事。

编辑:

回调绑定到AJAX

$就()来完成(功能(数据){的console.log(数据);});

+0

这不会和做异步AJAX调用一样吗?我需要等待AJAX​​调用返回才能继续 – koopajah

+1

这是一种特殊情况,您真的需要等到通话结束吗?或者你可以通过在我的文章中使用回调绑定来做任何你需要做的操作? (编辑) – roacher

+0

不,我“必须”等待。至少我知道我可以使用异步AJAX查询并避免此问题。但我的应用程序不是这样设计的,我真的很想了解这里发生了什么。 – koopajah