Jquery自动完成:使用选项卡选择第一个项目并保持对搜索框的关注

时间:2012-05-03 07:50:11

标签: jquery jquery-ui autocomplete

当我使用JQuery UI自动完成时,我需要使用tab键在搜索框中填入自动完成结果中的第一项,然后包含空格,然后允许用户继续键入。

<div class="ui-widget">
  <form id="searchbox" method="GET" action="http://duckduckgo.com/">
    <input id="search" type="text" name="q">
    <input id="submit" type="submit" value="Search">
  </form>
</div>
<script>
var tabKey = 9;
$('#search').autocomplete({
    source: [ 'this', 'that', 'foobar' ],
    delay: 0,
    selectFirst: true,
    select: function(event, ui) { if (event.keyCode == tabKey) { 
      $('#search').focus().select();
    } }
});
// without this, the tab key doesn't trigger an event                                                                                       
$('.ui-autocomplete').keypress(function(event) {});
</script>

换句话说,在上面的示例中,如果有人输入“th”,他们会在自动填充选项中看到“this”和“that”。点击选项卡会在输入中添加“this”(注意空格),焦点将保留在输入中。

有人可以给我一个关于我错过的指针吗?我不太了解Javascript,所以小词很好:)

也许更多有用的信息(jquery 1.7.2)来自HEAD部分:

<script src="js/jquery-latest.js"></script>
<script src="js/jquery-ui-1.8.20.custom.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.20.custom.css" /> 

编辑:似乎autoFocus: true会让我在那里。现在,如果我能弄清楚如何将注意力集中在输入框上。

3 个答案:

答案 0 :(得分:6)

Hiya 演示 http://jsfiddle.net/DMDHC/

希望这会有所帮助,:))

因此,如果您输入Ra,您会看到rambo和其他选项弹出,然后点击tab键,您会看到added text + " "会出现焦点在文本框中,以便你可以继续输入。

我做的另一件事是event.preventDefault();,它会阻止任何默认行为,让你知道你在做什么吗?乙 - )

jquery代码

$( "#search" ).autocomplete({
    source: function( req, resp ) {
        $.post( "/echo/json/", {
            json: '["Rambo", "Foobar", "This", "That", "Batman", "Hulk"]',
            delay: 1
        }, function(data) {
            resp( data );
        }, "JSON" );
    },
        select: function(event, ui) {

             var TABKEY = 9;
            this.value = ui.item.value;

            if (event.keyCode == TABKEY) { 
                event.preventDefault();
                this.value = this.value + " ";
                $('#search').focus();
            }

            return false;
        }
});

​

答案 1 :(得分:0)

我用这个(coffeescript):

$("#autocomplete").keydown (event) ->
    if event.keyCode != $.ui.keyCode.TAB then return true
    $(this).trigger($.Event 'keydown', keyCode: $.ui.keyCode.DOWN)
    false

答案 2 :(得分:0)

自动对焦将在下拉搜索中选择第一条记录...

您的代码将只需要包含autoFocus: true,,如下所示:

$('#search').autocomplete({
    source: url,
    delay: 0,
    autoFocus: true,
    select: function( event, ui ) {
        $( "#id" ).val( ui.item.id );
        $(this).closest('form').submit();
    },
    focus: function( event, ui ) { event.preventDefault(); }
});