jQuery UI自动完成等待搜索事件完成
我有一个文本框绑定到jQuery UI的自动完成。当用户从自动完成下拉列表中选择一个选项时,JSON数据将用于使用来自远程源的用户详细信息填充表单。jQuery UI自动完成等待搜索事件完成
我有绑定了以下功能的复位按钮:
$('#btn_reset').on('click', function() {
$('#txt_name').autocomplete('search');
$('.ui-menu-item').children().eq(0).click();
return false;
});
这可与少量的本地数据为search
click()
完成之前被调用,但是与大量外部数据,search
没有及时完成,因此给我一个'item' is null or not an object
错误。
我怎样才能让jQuery等到search
完成后才致电click()
?
下面是一个使用本地数据源的工作小提琴:http://jsfiddle.net/3KTtT/3/
解决方法是将函数绑定到自动完成的open
事件,以检查布尔变量以确定表单是否正在重置。
var reset = false;
$(function() {
$('#txt_name').autocomplete({
source: [{"label":"john smith","address":"19 Tree Lane"}],
delay: 0,
autoFocus: true,
open: function() {
if(reset){
$('.ui-menu-item').children().eq(0).click();
reset = false;
}
},
select: function(event, ui) {
$('#txt_address').val(ui.item.address);
}
});
$('#btn_reset').on('click', function() {
reset = true;
$('#txt_name').autocomplete('search');
return false;
});
});
在这里看到小提琴:http://jsfiddle.net/RVnkz/2/
我已经改变了你的榜样,包括延时循环,它检查是否有一个值,然后我打电话给你的点击事件。应该把你在正确的轨道上:
如果你看一下下面的代码,我有大于0,所以您可以测试代码,但它应该是小于1
$('#btn_reset').on('click', function() {
$('#txt_name').autocomplete('search');
if($('#txt_name').val().length>0) //THIS LINE
{
CheckValue();
}
else
{
$('.ui-menu-item').children().eq(0).click();
return false;
}
});
'CheckValue'似乎只之前'点击添加一个一次性的1500延迟()'被激发:( – Elliott 2012-08-14 14:14:12
是这就是正确的,因为它发现有一个值为“txt_name”。如果它没有,你会看到CheckValue()被再次调用,如果“loaded”不等于1.检查这个改变[jsFiddle](http://jsfiddle.net/jjay225/3KTtT/20 /) - 我已经设置“加载”等于0,并添加了一个console.log来显示它被调用的次数。 – jjay225 2012-08-14 14:29:33
感谢你对此的帮助,但我刚刚发现了一种完全不同的方式,在自动完成打开和“click()”之间没有延迟。我会在第二个 – Elliott 2012-08-14 14:47:30
作为答案张贴它很酷的东西的人。很高兴你把事情解决了。它现在对远程数据有效吗? – jjay225 2012-08-14 15:04:28
是啊工作完美:)试图找到一个基本的远程JSON数据源发布我的原始小提琴但无济于事... 再次感谢您的帮助btw – Elliott 2012-08-14 15:30:09
好的工作Elliott :)你很欢迎嘿。 – jjay225 2012-08-15 07:07:27