如何让jQuery自动完成功能弹出字段焦点?

时间:2011-02-07 00:23:49

标签: jquery jquery-autocomplete

  

可能重复:
  jQuery autocomplete UI- I'd like it to start the search onfocus without the user having to type anything

jQuery UI Autocomplete

我想在输入聚焦后立即显示选项。那有什么设置吗?我尝试将minLength设置为0,但它不起作用......它仍然等待按键。

4 个答案:

答案 0 :(得分:25)

$("#yourField").bind('focus', function(){ $(this).autocomplete("search"); } );

这里有一个jsfiddle:http://jsfiddle.net/fpHf4/2/ 更新了一个(针对IE):http://jsfiddle.net/q9ERL/4/

如@HoldOffHunger所启示,您还必须将minLength设置为0

答案 1 :(得分:2)

我认为你打破“自动完成”实用程序只是做一个程式化的选择,这就是等待按键有一些东西要完成的原因。

我知道它不是你要找的那个,只记得这个你试着用几个选项做的工作,如果有很多你会在第一个字母上得到硬自动填充div加载。

或者你可以在你的sql查询上有10条结果记录,如果是这样的,那么快点不加载所有类型的结果

---我测试了对ie8的焦点绑定,它失败了,顺便说一下它没有失败它完全是你想要打开div盒上的焦点,不同的是IE触发onFocus事件,而jquery焦点事件,不喜欢其他所以su必须评估焦点事件,如果字段是空的发布搜索,如果不是什么都不做..我希望这有帮助。

$("#yourField").bind('focus', function(){
  if($(this).val()!=""){ 
     $(this).autocomplete("search");
  } 
});

答案 2 :(得分:0)

这是一个解决方案,在选择项目后没有弹出列表第二次(如Mark所述),并且当输入框已经有文本时也可以工作:

jQuery autocomplete UI- I'd like it to start the search onfocus without the user having to type anything

答案 3 :(得分:0)

这是我的完整解决方案(它还做了一些其他事情):

$.fn.ajaxselect = function(options) {
    var settings = {
        delay: 300,
        sourceData: function(term) {
            return {term:term};
        },
        sourceUrl: null,
        select: function(item) {},
        html: true,
        minLength: 0,
        autoSelect: true,
        autoFocus: true,
        showOnClick: null
    };

    if(options) $.extend(settings, options);
    if(settings.showOnClick === null) settings.showOnClick = settings.minLength === 0;

    $(this).autocomplete({
        source: function(request, response) {
            var data = settings.sourceData.call(this.element[0], request.term);
            if(data === false) {
                response([]);
                return;
            }
            $.ajax({
                url: settings.sourceUrl,
                dataType: 'json',
                data: data,
                success: function(data, textStatus, $xhr) {
                    response(data);
                },
                error: function($xhr, textStatus) {
                    response([]);
                }
            });
        },
        focus: function(e, ui) {
            return false; // don't fill input with highlighted value
        },
        search: function(e, ui) {
            if(settings.minLength < 0 && e.hasOwnProperty('originalEvent')) return false;  // don't search on keypress if minLength < 0 (use with showOnClick)
            $(this).data('lastSearch', this.value);
            return true;
        },
        select: function(e, ui) {
            if(!settings.autoSelect && e.keyCode === 9) return false; // don't select highlighted item on tab unless autoSelect is enabled
            if($(this).val() === $(this).data('lastSearch')) {
                if(settings.select.call(this, ui.item) !== false) {
                    $(this).val(ui.item.value);
                }
                $(this).data('selectedValue',$(this).val()).trigger('change');
            } 
            return false;
        },
        open: function(e, ui) {
            $(this).data('isOpen', true);
        },
        close: function(e, ui) {
            $(this).data('isOpen', false);
        },
        minLength: settings.minLength,
        autoFocus: settings.autoFocus,
        delay: settings.delay,
        html: settings.html
    }).bind('change.ajaxselect', function() {
        $(this).toggleClass('ajax-selected', $(this).val() === $(this).data('selectedValue'));
    });

    if(settings.autoSelect) {
        $(this).bind('autocompletechange.ajaxselect', function(event, ui) {
            if($(this).val() !== $(this).data('selectedValue') && this.value.length > 0) {
                var self = this;
                var data = $.extend({autoSelect:1},settings.sourceData.call(this, this.value));
                $(this).addClass('.ui-autocomplete-loading');
                $.ajax({
                    url: settings.sourceUrl,
                    dataType: 'json',
                    data: data,
                    success: function(data, textStatus, $xhr) {
                        if(data.length >= 1) {
                            var item = $.ui.autocomplete.prototype._normalize(data)[0];
                            if(settings.select.call(self, item) !== false) {
                                $(self).val(item.value);
                            }
                            $(self).data('selectedValue',$(self).val()).trigger('change');
                        }
                    },
                    complete: function($xhr, textStatus) {
                        $(self).removeClass('.ui-autocomplete-loading');
                    }
                });
            }
        });
    }

    if(settings.showOnClick) {
        $(this).bind('click.ajaxselect', function(e) {
            if(!$(this).data('clickHandled') && !$(this).data('isOpen')) {
                $(this).data('clickHandled',true);
                $(this).autocomplete('search','');
            } else {
                $(this).data('clickHandled',false);
            }
        }).bind('focus.ajaxselect', function(e) {
            if(!$(this).data('clickHandled') && e.hasOwnProperty('originalEvent') && $(this).val() === this.defaultValue && !$(this).data('isOpen')) {
                $(this).data('clickHandled',true);
                $(this).autocomplete('search','');
            } else {
                $(this).data('clickHandled',false);
            }
        })
    }

    return $(this);
};
相关问题