延迟jQuery UI自动完成焦点事件

时间:2013-02-05 17:04:59

标签: javascript jquery ajax jquery-ui autocomplete

我正在使用jQuery UI库版本1.8.23中的自动完成小部件。我的代码如下所示:

$(this).autocomplete({
     autoFocus: true,
     minLength: 2,
     delay:     100,
     source:    function(request, response) {AutoCpl.getSource(request, response)},
     select:    function(e, ui)             {AutoCpl.getSelect( e, ui, $(this) )},
     open:      function(e, ui)             {AutoCpl.setOpen($(this))}
});

延迟100毫秒后,我正在使用AJAX检索产品列表。一切正常,但我有焦点事件的问题。我希望在选择列表中悬停时显示产品详细信息。由于需要计算大量数据,我无法立即返回产品列表中的产品详细信息。我需要使用另一个AJAX调用以便稍后在焦点事件上获取这些信息。因为有人可以在一次鼠标移动中将鼠标悬停在所有产品上,所以我无法进行AJAX调用并显示每个响应。我必须确定有人真的想要查看特定产品的详细信息,所以我想等待一段时间进行AJAX调用。

我试图使用Ben Alman的jQuery debouce插件,但它不会按我想要的方式工作(或者我可能只是错误地使用它)。如果我这样试过:

focus:     $.debounce(1000, App.getProductsDetails)

事件被延迟了1秒(没关系)但是在getProductsDetailt中我无法访问事件和ui对象。 我尝试了另一种方式:

focus:     function(e, ui){$.debounce(1000, App.getProductsDetails)}

这次getProductsDetails甚至没有被调用,这并没有让我感到惊讶,因为据我所知,debounce函数必须绑定到一个事件即。 $( '#标识')。单击($。反跳())。

我的问题是如何延迟焦点事件,同时可以通过焦点事件访问对象?

1 个答案:

答案 0 :(得分:1)

经过几个小时的研究和尝试后,我找到了答案。

$。去抖函数传递所有参数,所以我需要做的就是在我的AgetProductsDetails方法中添加参数:

App = {
    getProductsDetails: function(e, ui){
        console.log(ui);
    }
}

所以这段代码:

 focus:     $.debounce(1000, App.getProductsDetails)

很好。 Documentation of debounce plug-in给了我一个线索。

我后来犯了错误......