jQuery autoComplete просмотреть все по клику?

Я использую автозаполнение 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 (например, кнопку или ссылку), которое будет отображать все доступные варианты автозаполнения? В основном я хочу сделать гибрид автозаполнения и элемента выбора/выпадающего списка.

Спасибо!


person Rio    schedule 12.08.2009    source источник


Ответы (21)


Я не вижу очевидного способа сделать это в документах, но вы пытаетесь вызвать событие фокуса (или щелчка) в текстовом поле с включенным автозаполнением:

$('#myButton').click(function() {
   $('#autocomplete').trigger("focus"); //or "click", at least one should work
});
person karim79    schedule 12.08.2009
comment
См. ответ Тома Пьетросанти ниже, чтобы узнать, как это сделать без использования триггера или кнопки. - person njfife; 02.01.2014
comment
См. также ответ Крейга ниже. - person Baz Guvenkaya; 29.09.2015

Вы можете инициировать это событие, чтобы отобразить все параметры:

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

Или посмотрите пример по ссылке ниже. Похоже, именно то, что вы хотите сделать.

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

ИЗМЕНИТЬ (от @cnanney)

Примечание. Вы должны установить minLength: 0 в автозаполнении, чтобы пустая строка поиска возвращала все элементы.

person Tom Pietrosanti    schedule 05.08.2010
comment
Это сработало ОТЛИЧНО! Я немного изменился и на свой элемент ввода поставил onfocus="javascript:$(this).autocomplete('search','');" . Спасибо за помощь! - person eidylon; 21.09.2010
comment
Отлично сработало для меня. Вы должны установить minLength: 0 в своем автозаполнении, чтобы пустая строка поиска возвращала все элементы. Мой был установлен на 1, и потребовалось некоторое время, чтобы понять, почему он не работает. - person cnanney; 18.02.2011
comment
Рад, что это сработало! И спасибо за разъяснение, чувак! Я не считал это в то время. - person Tom Pietrosanti; 11.04.2012
comment
Это правильный ответ. Было бы неплохо, если бы была опция .show()! - person Josh M.; 27.04.2012
comment
только что получил то, что хотел .. отличное решение. Последняя проблема решена @cnanney. - person Arfeen; 29.09.2012
comment
Я добавил комментарий @cnanney в решение для большей наглядности. - person Tom Pietrosanti; 16.01.2013
comment
Примечание в этом ответе действительно избавляет меня от проблем! Я час пытался понять, почему когда-нибудь autocomplete("search","") не покажет весь результат. - person chanp; 12.05.2013

Я нашел, что это работает лучше всего

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)

person Craig    schedule 28.03.2012
comment
Мне нравится этот ответ больше всего, потому что если вы используете ‹key›Tab‹/key› для переключения фокуса между входами, становится ясно, что для ввода текста доступно автозаполнение. Некоторые люди не используют мышь, чтобы щелкнуть все;) - person styfle; 01.11.2012
comment
Отлично! Для всех тех, у кого возникли трудности с тем, чтобы заставить это работать, параметр minLength: 0 кажется важным, чтобы заставить это работать! ;) - person Andreas; 21.07.2020

Чтобы отобразить все элементы / смоделировать поведение поля со списком, вы должны сначала убедиться, что вы установили для параметра minLength значение 0 (по умолчанию 1). Затем вы можете связать событие щелчка, чтобы выполнить поиск с пустой строкой.

$('inputSelector').autocomplete({ minLength: 0 });
$('inputSelector').click(function() { $(this).autocomplete("search", ""); });
person Nine Tails    schedule 17.05.2012

попробуй это:

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

и minLength установлено значение 0.

работает каждый раз :)

person Cobaltus    schedule 05.04.2011


<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/

person Wilzon    schedule 01.12.2014

Вы должны установить minLength на ноль, чтобы это работало! Вот рабочий пример.

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

это единственное, что работает для меня. Список показывается каждый раз и закрывается при выборе:

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

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

вы можете использовать это:

$("#example").autocomplete( "search",  $("#input").val() );
person Renato Chea    schedule 10.04.2011

это показывает все варианты: "%" (см. ниже)

Важно то, что вы должны разместить его под предыдущим объявлением #example, как в примере ниже. Это заняло у меня некоторое время, чтобы понять.

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

$("#example").autocomplete( "search", "%" );
person Sebastian    schedule 16.12.2010

надеюсь, это поможет кому-то:

$('#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
        })
person Tsonev    schedule 15.11.2013

Я решил это с помощью атрибута 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");
}
person Mesrop    schedule 09.08.2011

Я видел все ответы, которые кажутся полными.

Если вы хотите получить список, когда курсор находится в текстовом поле ИЛИ когда вы нажимаете на соответствующую метку, вот как вы можете это сделать:

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

это отлично работает в Firefox, IE, Chrome...

person Youssef    schedule 21.11.2012

Я не мог заставить работать часть $("#example").autocomplete( "search", "" );, только после того, как я изменил свой поиск на символ, который существует в моем источнике, он работает. Поэтому я тогда использовал, например. $("#example").autocomplete( "search", "a" );.

person Kosmosniks    schedule 25.11.2010
comment
Возможно, вам потребуется установить для minChars значение 0. - person Spongeboy; 08.12.2010
comment
это работает, если вы делаете: $(#example).autocomplete(search,); ? - person Youssef; 11.01.2013

Я предполагаю, что лучший вариант - поставить $("#idname").autocomplete("search", ""); в параметр onclick текстового поля. Так как при выборе фокус ставится jquery, это может быть обходным путем. Не знаю, должно ли это быть приемлемым решением.

person human.js    schedule 31.03.2012

Мне нужно было сделать это недавно, и, попробовав несколько разных перестановок (используя 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 к очень хорошему Chosen. выбирать списки с обновлением Melting Ice, когда у меня есть шанс .

person De Shan Baptiste    schedule 10.12.2012

Я использовал этот способ:

$("#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");
person 91m0n    schedule 27.01.2016

Вы также можете использовать функцию поиска без параметров:

jQuery("#id").autocomplete("search", "");
person Jean-David    schedule 25.04.2019

Если входное значение пусто, ищите значение внутри ввода. Этот код работает для меня:

$("#your_input").on('focus', function () {
   $(this).autocomplete('search', $(this).val() == '' ? " " : $(this).val());    
});
person Shayan Shaikh    schedule 01.09.2020

person    schedule
comment
Я попробовал это, и в первый раз он работал нормально, но после того, как текстовое поле было сфокусировано, а затем расфокусировано, если я вернусь к нему во второй раз, он больше не будет отображать список автозаполнения, пока я не обновлю страницу, после чего он снова работать только один раз. - person eidylon; 21.09.2010
comment
$(.auto_complete).focus(function() { $(this).trigger(keydown) }) -> Это работает! - person ariel; 06.10.2010