1

我有一个绑定到 jQuery UI 自动完成的文本框。当用户从自动完成下拉列表中选择一个选项时,JSON 数据用于使用来自远程源的用户详细信息填充表单。

我有一个绑定了以下功能的重置按钮:

$('#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错误。

如何让 jQuerysearch在调用之前等待完成click()

这是使用本地数据源的工作小提琴:http: //jsfiddle.net/3KTtT/3/

4

2 回答 2

1

解决方案是将函数绑定到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/

于 2012-08-14T14:56:34.580 回答
0

我已经更改了您的示例以包含一个延迟循环,它会检查是否有值,然后我调用了您的点击事件。应该让你走上正确的轨道:

jsFiddle 演示

如果您查看下面的代码,我得到的大于 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;
    }
});
于 2012-08-14T12:20:23.107 回答