Jquery自动完成:使用Tab键选择第一项并仍然保持对搜索框的焦点

8
当我使用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”。按Tab键会将“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" /> 
< p > < em >编辑:看来< code >autoFocus: true 可以帮我解决部分问题。现在只需要弄清楚如何保持输入框的焦点。
3个回答

6

你好 演示 http://jsfiddle.net/DMDHC/

希望这能帮到您, :)

如果您输入Ra,则会看到rambo和其他选项弹出,然后按tab键,您将看到added text + " "将出现在文本框上,并使焦点保持在文本框上,以便您可以继续输入。

我做的另一件事是event.preventDefault();,它将防止任何默认行为,其余的您应该知道该怎么做!B-)

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
太好了。我需要进行一些微调,现在正好符合我的要求。谢谢 :) - Ovid
@Ovid 很高兴能帮到你!随时找我哥们!祝你一切顺利!再见。 - Tats_innit

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

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(); }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接