我正在使用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函数必须绑定到一个事件即。 $( '#标识')。单击($。反跳())。
我的问题是如何延迟焦点事件,同时可以通过焦点事件访问对象?
答案 0 :(得分:1)
经过几个小时的研究和尝试后,我找到了答案。
$。去抖函数传递所有参数,所以我需要做的就是在我的AgetProductsDetails方法中添加参数:
App = {
getProductsDetails: function(e, ui){
console.log(ui);
}
}
所以这段代码:
focus: $.debounce(1000, App.getProductsDetails)
很好。 Documentation of debounce plug-in给了我一个线索。
我后来犯了错误......