1

我正在使用 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 函数必须绑定到一个事件,即。$('#id').click($.debounce())。

我的问题是如何延迟焦点事件并同时访问焦点事件返回的对象?

4

1 回答 1

1

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

$.debounce 函数传递所有参数,所以我需要做的就是向我的 AgetProductsDetails 方法添加参数:

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

所以这段代码:

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

很好。debounce 插件的文档给了我一个线索。

我后来犯了错误...

于 2013-02-05T18:19:05.097 回答