jQuery autoComplete点击全部查看?


67

我以相对简单的方式使用jQuery的自动完成功能:

$(document).ready(function() {
  var data = [ {text: "Choice 1"}, 
               {text: "Choice 2"}, 
               {text: "Choice 3"} ]

$("#example").autocomplete(data, {
  matchContains: true,
  minChars: 0,
  formatItem: function(item) 
    { return item.text; }
    }
  );
  });

如何添加onclick事件(如按钮或链接),以显示自动完成功能的所有可用选项?基本上,我希望将自动完成和选择/下拉元素混合在一起。

谢谢!

Answers:


19

我在文档中看不到明显的方法,但是尝试在启用自动完成功能的文本框上触发焦点(或单击)事件:

$('#myButton').click(function() {
   $('#autocomplete').trigger("focus"); //or "click", at least one should work
});

2
请参见Tom Pietrosanti的回答波纹管,以了解无需使用触发器或按钮即可执行此操作的方法。
njfife 2014年

2
另请参阅下面的Craig的答案。
巴兹(Baz Guvenkaya)

100

您可以触发此事件以显示所有选项:

$("#example").autocomplete( "search", "" );

或参见下面链接中的示例。看起来正是您想要的。

http://jqueryui.com/demos/autocomplete/#combobox

编辑(来自@cnanney)

注意:必须在自动完成功能中将minLength:0设置为空的搜索字符串才能返回所有元素。


4
这完全有效!我做了些改动,然后在输入元素上放了onfocus="javascript:$(this).autocomplete('search','');"。谢谢您的帮助!
eidylon'9

45
对我来说很棒。您必须minLength: 0在自动完成中设置一个空的搜索字符串以返回所有元素。我的被​​设置为1,花了一些时间弄清楚为什么不起作用。
cnanney 2011年

很高兴它有效!感谢您的澄清,谢谢!当时我没有考虑过。
Tom Pietrosanti 2012年

2
这是正确的答案。如果有.show()选择的话会很好!
Josh M.

刚得到我想要的。最终的问题也由@cnanney解决。
阿芬2012年

39

我发现这最有效

var data = [
    { label: "Choice 1", value: "choice_1" },
    { label: "Choice 2", value: "choice_2" },
    { label: "Choice 3", value: "choice_3" }
];

$("#example")
.autocomplete({
    source: data,
    minLength: 0
})
.focus(function() {
    $(this).autocomplete('search', $(this).val())
});

它搜索标签并将值放入元素$(#example)


4
我最喜欢这个答案,因为如果您使用<key> Tab </ key>在输入之间切换焦点,则很明显文本输入具有自动完成功能。有些人不使用鼠标单击所有内容;)
styfle 2012年

1
这很棒!对于所有难以解决此问题的人来说,minLength: 0参数似乎对于解决此问题至关重要!;)
Andreas

7

为了显示所有项目/模拟组合框行为,首先应确保将minLength选项设置为0(默认值为1)。然后,您可以绑定click事件以使用空字符串执行搜索。

$('inputSelector').autocomplete({ minLength: 0 });
$('inputSelector').click(function() { $(this).autocomplete("search", ""); });

6

尝试这个:

    $('#autocomplete').focus(function(){
        $(this).val('');
        $(this).keydown();
    }); 

minLength设置为0

每次都可以工作:)


5

解决方案来自:在焦点事件上显示jquery ui自动完成列表

使它多次运行的解决方案

<script type="text/javascript">
$(function() {
    $('#id').autocomplete({
        source: ["ActionScript",
                    /* ... */
                ],
        minLength: 0
    }).focus(function(){     
        //Use the below line instead of triggering keydown
        $(this).data("autocomplete").search($(this).val());
    });
});


4

必须设定minLength,以使这项工作!这是工作示例。

$( "#dropdownlist" ).autocomplete({
      source: availableTags,
      minLength: 0 
    }).focus(function() {
      $(this).autocomplete('search', $(this).val())
    });
});

3
 $j(".auto_complete").focus(function() { $j(this).keydown(); })

我尝试了一下,并且第一次效果很好,但是在将文本框聚焦后又没有聚焦之后,如果我第二次返回它,它将不再显示自动完成列表,直到刷新页面为止,此时它将再次显示只工作一次。
eidylon's

$(“。auto_complete”)。focus(function(){$(this).trigger(“ keydown”)})->可以!
ariel

3
<input type="text" name="q" id="q" placeholder="Selecciona..."/>


<script type="text/javascript">
//Mostrar el autocompletado con el evento focus
//Duda o comentario: http://WilzonMB.com
$(function () {
    var availableTags = [
        "MongoDB",
        "ExpressJS",
        "Angular",
        "NodeJS",
        "JavaScript",                
        "jQuery",
        "jQuery UI",
        "PHP",
        "Zend Framework",
        "JSON",
        "MySQL",
        "PostgreSQL",
        "SQL Server",
        "Oracle",
        "Informix",
        "Java",
        "Visual basic",
        "Yii",
        "Technology",
        "WilzonMB.com"
    ];
    $("#q").autocomplete({
        source: availableTags,
        minLength: 0
    }).focus(function(){            
       $(this).autocomplete('search', $(this).val())
     });
});
</script>

http://jsfiddle.net/wimarbueno/6zz8euqe/


2

这是唯一对我有用的东西。列表每次显示,选择后关闭:

$("#example")
.autocomplete(...)
.focus(function()
{
  var self = this;

  window.setTimeout(function()
  {
    if (self.value.length == 0)
      $(self).autocomplete('search', '');
  });
})

2

您可以使用此:

$("#example").autocomplete( "search",  $("#input").val() );

2

这显示了所有选项:("%"见下文)

重要的是,您必须将其放置在先前的#example声明下面,如下面的示例所示。这花了我一段时间才能弄清楚。

$( "#example" ).autocomplete({
            source: "countries.php",
            minLength: 1,
            selectFirst: true
});

$("#example").autocomplete( "search", "%" );

2

希望这对某人有帮助:

$('#id')
        .autocomplete({
            source: hints_array,
            minLength: 0, //how many chars to start search for
            position: { my: "left bottom", at: "left top", collision: "flip" } // so that it automatically flips the autocomplete above the input if at the bottom
            })
        .focus(function() {
        $(this).autocomplete('search', $(this).val()) //auto trigger the search with whatever's in the box
        })

1

我使用minChars:0属性解决了此问题,然后触发了两次单击。(输入1次点击后自动完成显示)我的代码

<input type='text' onfocus='setAutocomplete(this)'>

function setAutocomplete(el){
    $(el).unbind().autocomplete("./index.php", {autoFill:false, minChars:0, matchContains:true, max:20});
    $(el).trigger("click");$(el).trigger("click");
}

1

我已经看到所有似乎完整的答案。

如果要在光标位于文本字段中或单击匹配标签时获取列表,请执行以下操作:

//YourDataArray = ["foo","bar"];
$( "#YourID" ).autocomplete({
            source: YourDataArray 
        }).click(function() { $(this).autocomplete("search", " "); });

这在Firefox,IE,Chrome浏览器中正常工作...


1
$("#searchPkgKeyWord").autocomplete("searchURL",
        {
            width: 298,
            max: 1000,
            selectFirst: false
        }).result(function (event, row, formatted) {
            callback(row[1]);
        }).focus(function(){
            $(this).click(); //once the input focus, all the research will show
        });

0

$("#example").autocomplete( "search", "" );只有当我使用源代码中存在的字符更改搜索后,我才能使该部分正常工作。所以我然后用了 $("#example").autocomplete( "search", "a" );


您可能需要设置minChars 0
Spongeboy

如果这样做,是否可行:$(“#example”)。autocomplete(“ search”,“”); ?
Youssef

0

我猜一个更好的选择是将$(“#idname”)。autocomplete(“ search”,“”); 进入文本框的onclick参数。由于在select上,jquery放置了焦点,所以这可能是一种解决方法。不知道它是否应该是可以接受的解决方案。


0

我最近需要这样做,在尝试了几种不同的排列方式(使用onfocus,文本框的onclick等)之后,我终于解决了这个问题。

 <input id="autocomplete" name="autocomplete" type="text" 
 value="Choose Document">

 <p>
 <button type="submit" value="Submit" name="submit" id="submit" >
  Submit
 </button>
 </p>

<script type="text/javascript">

$("#autocomplete").autocomplete(
{
source: '@Url.Content("~/Document/DocumentTypeAutoComplete/")' //<--ddl source
, minLength: 0 // <-- This is necessary to get the search going on blank input
, delay: 0
, select: function (event, ui) 
  {
  if (ui.item) {
     $("#autocomplete").val(ui.item.value);//<-- Place selection in the textbox
          $("docForm").submit(); 
          loadDocTypeCreatePartial(ui.item);
          $("#submit").focus(); //This stops the drop down list from reopening 
                                // after an item in the select box is chosen
                                // You can place the focus anywhere you'd like,
                                // I just chose my *submit* button
                }
   }
  }).focus(function () {
    // following line will autoselect textbox text
    // making it easier for the user to overwrite whats in the 
    // textbox
    $(this).select();

    //The below line triggers the search function on an empty string
    $(this).data("autocomplete").search('');
   });
 </script>

这将打开自动完成的ddl列表(即使您像我在上面那样在输入框中输入了默认文本)也是如此。

它还会自动选择文本框中的文本,以防止用户必须清除文本。

从自动完成列表中选择一个项目后,它将把该项目放入自动完成输入框中,并将焦点移到另一个控件上(从而防止自动完成重新打开)。

我计划通过增加动态Ajax调用到非常好的替代它选上的选择列表与冰川消融的时候我有机会升级。


0

我用这种方式:

$("#autocomplete").autocomplete({
                source: YourDataArray,
                minLength: 0,
                delay: 0
            });

然后

OnClientClick="Suggest(this); return false;"/>

 function Suggest(control) {
                var acControl = $("#" + control.id).siblings(".ui-autocomplete-input");
                var val = acControl.val();
                acControl.focus();
                acControl.autocomplete("search");

0

您也可以使用不带参数的搜索功能:

jQuery("#id").autocomplete("search", "");

0

如果输入值为空,则搜索输入内部的值。该代码对我有用:

$("#your_input").on('focus', function () {
   $(this).autocomplete('search', $(this).val() == '' ? " " : $(this).val());    
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.