Подтвердить что ты не робот

Отобразить jquery ui автозаполненный список событий фокуса

вот мой код, что-то не так с ним? он, похоже, не отображает список в фокусе, мне все равно нужно нажать клавишу, прежде чем он отобразит список

<link media="all" type="text/css" href="#" onclick="location.href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/smoothness/jquery-ui.css'; return false;" rel="stylesheet"/>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>

<script type="text/javascript">
    $(function() {
        $('#id').autocomplete({
            source: ["ActionScript",
                        "AppleScript",
                        "Asp",
                        "BASIC",
                        "C",
                        "C++",
                        "Clojure",
                        "COBOL",
                        "ColdFusion",
                        "Erlang",
                        "Fortran",
                        "Groovy",
                        "Haskell",
                        "Java",
                        "JavaScript",
                        "Lisp",
                        "Perl",
                        "PHP",
                        "Python",
                        "Ruby",
                        "Scala",
                        "Scheme"
                    ],
            minLength: 0
        });
    }).focus(function(){            
            $(this).trigger('keydown.autocomplete');
    });
</script>


<input type="text" id="id">
4b9b3361

Ответ 1

Похоже, вы прикрепляете обработчик focus() к анонимной функции, а не к текстовому полю.

Попробуйте следующее:

<script type="text/javascript">
    $(function() {
        $('#id').autocomplete({
            source: ["ActionScript",
                        /* ... */
                    ],
            minLength: 0
        }).focus(function(){            
            // The following works only once.
            // $(this).trigger('keydown.autocomplete');
            // As suggested by digitalPBK, works multiple times
            // $(this).data("autocomplete").search($(this).val());
            // As noted by Jonny in his answer, with newer versions use uiAutocomplete
            $(this).data("uiAutocomplete").search($(this).val());
        });
    });
</script>

Ответ 2

Решение, чтобы заставить его работать более одного раза

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

Ответ 3

Этот метод прямого вызова вызывает значение по умолчанию при фокусировке.

http://jsfiddle.net/steelywing/ubugC/

$("input").autocomplete({
    source: ["Apple", "Boy", "Cat"],
    minLength: 0,
}).focus(function () {
    $(this).autocomplete("search");
});

Ответ 4

digitalPBK почти правильно...

Его решение работает не один раз, но не закрывает список выпадающих списков, когда вы выбираете элемент из списка с помощью мыши. В этом случае фокус возвращается к элементу управления, когда вы нажимаете кнопку, поэтому он снова открывает список, когда он должен закрывать его.

Здесь исправление, и это единственное, что работает для меня, как я думаю, он должен работать при использовании самой последней версии (1.8.11) функции autocomplete(). Когда элемент управления получает фокус, он не отображает все-на-фокусе, если выпадающий список уже показан...

<script type="text/javascript"> 
    $(function() {
        $('#id').autocomplete({
            source: ["ActionScript",
                        /* ... */
                    ],
            minLength: 0
        }).focus(function () {
            if ($(this).autocomplete("widget").is(":visible")) {
                return;
            }
            $(this).data("autocomplete").search($(this).val());
        });
</script>

Ответ 5

$(this).trigger('keydown.autocomplete'); не работает для меня.

Это то, что я сделал:

$('#id').on( "focus", function( event, ui ) {
    $(this).trigger(jQuery.Event("keydown"));
   // Since I know keydown opens the menu, might as well fire a keydown event to the element
});

Ответ 6

В более поздних версиях вам может потребоваться изменить автозаполнение на uiAutocomplete

$(this).data("uiAutocomplete").search($(this).val());

Ответ 7

Если вы хотите что-то изменить в пользовательском интерфейсе jQuery, сделайте это с помощью jQuery UI.

Использовать пользовательский интерфейс jQuery Виджет Factory. Это легче поддерживать, быстрее и намного чище, чем прикреплять события к элементу.

$.widget('custom.autocomplete', $.ui.autocomplete, {
  options: {
    minLength: 0
  },
  _create: function() {
    this._on(this.element, {
      focus: function(event) {
        this.search();
      }
    });

    this._super();
  }
});

Ответ 8

Общая цель автозаполнения заключается в том, чтобы выполнить нажатие клавиши и на основании буквы, которую мы вводим, она будет часто выполнять поиск по диким картам и показывать результат.

В любом случае, из приведенного выше кода я вижу, что:

фокус (функция() {
      $ (Это).trigger( 'keydown.autocomplete');

который прикреплен, как сказано Codesleuth, к анонимной функции вместо Control.