Как задействате ръчно събитие за избор на автоматично довършване в jQueryUI?

Използвам автоматично довършване на jQueryUI и имам функция, нанесена към избраното събитие, напр.:

$("#someId").autocomplete({
    source: someData,
    select: function (event, ui) { ... },
    focus: function (event, ui) { ... }
});

Имам специален случай: Потребителят е фокусирал върху елемент в падащото меню за автоматично довършване (но не го е избрал) и трябва да задействам събитието за избор ръчно от различна функция. Възможно ли е това? Ако е така, как?


person Jon Lemmon    schedule 03.10.2011    source източник


Отговори (10)


Ето какво проработи при мен:

$(this).data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}});
person temuri    schedule 20.06.2013
comment
браво, има ли по-добро решение? - person Developerium; 12.11.2013
comment
Отлично! това е единственото решение, което действително задейства събитието, а не просто имитира потребителско взаимодействие с потребителския интерфейс. - person yossi; 11.02.2014
comment
Това е по-добро от избрания отговор, защото предава важните потребителски данни - person SemanticZen; 15.07.2014
comment
Грешка: Не може да се получи свойството „_trigger“ на недефинирана или нулева препратка - person Joseph Norris; 26.06.2015
comment
@JosephNorris Вместо това опитайте... $(this).data('autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}}); - person Ian Warburton; 03.10.2018
comment
Трябваше да променя „стойност“ на „идентификатор“, иначе ui.item.id е недефиниран. - person Ian Warburton; 04.10.2018
comment
Ако получите същия проблем като Джоузеф Норис (не може да прочете свойството '_trigger' на undefined), опитайте console.log($(this).data());. В моя случай беше „customTableAutocomplete“ - person kurdtpage; 03.12.2019

Бихте могли да направите:

$("#someId").trigger("autocompleteselect");
person Nicola Peluchetti    schedule 03.10.2011
comment
Това е така, защото това ще работи само ако събитията са обвързани с $().on('autocompleteselect'), а не когато са обвързани в конструкция с $().autocomplete({select:function() {}}). Тогава използвайте $().data('autocomplete')._trigger() - person HenningCash; 27.02.2013
comment
можете ли да обясните повече как да изберете опция в select? - person Developerium; 12.11.2013

Можете да го направите по начина, по който екипът на jQuery го прави в своите модулни тестове - вижте този отговор

person Rune Vejen Petersen    schedule 21.03.2013

Просто извикайте следната функция

setAutocomplete("#txt_User_Name","rohit");

function setAutocomplete(autocompleteId,valuetoset)
    {
        $(autocompleteId).val(valuetoset);
        $(autocompleteId).autocomplete("search", valuetoset);
        var list = $(autocompleteId).autocomplete("widget");
        $(list[0].children[0]).click();
    }
person Rohit More    schedule 27.06.2017
comment
Трябваше да добавя време за изчакване към това, тъй като търсенето ми не беше завършено навреме (е ajax повикване) - person Matt Kemp; 12.11.2017

1 ред решение

$('.ui-menu-item .ui-corner-all:contains(\"123")').autocomplete({autoFocus:true}).mouseenter().click()
person cegprakash    schedule 27.11.2013
comment
Използването на .mouseenter().click() ми помогна да избера правилно елемент от резултатите - person Luksurious; 01.11.2016

Ако искаме да задействаме търсене на нещо конкретно:

$('#search-term').autocomplete('search', 'searching term');

или просто

$('#search-term').autocomplete('search');

$('#search-term').autocomplete({
    ...
    minLength: 0, // with this setting
    ...
});
person Alliswell    schedule 14.03.2016

Отвън:

$($('#someId').data('autocomplete').menu.active).find('a').trigger('click');

Пример как да настроите задействане на избор при натискане на хоризонтални клавиши със стрелки от вътрешността на събитието за автоматично довършване „отворено“:

$('#someId').autocomplete({
    open: function(event, ui) {
        $(this).keydown(function(e){
            /* horizontal keys */
            if (e.keyCode == 37 || e.keyCode == 39) {
               $($(this).data('autocomplete').menu.active).find('a').trigger('click');
            }
        });
    }
});

За съжаление този хубав начин как да реша това, отбелязано като "успех", не работи в моето приложение в chromium 140.0.835.200

person palmic    schedule 07.12.2011

Не е нужно да минавате през куп бъркотии, за да се обадите на select. Ето как наричам изберете от собствената си разширена версия на автоматичното довършване.

$(this).data('ui-autocomplete').options.select(event, ui);

където използвам това

/**
 * The jQuery UI plugin autocomplete
 */
$.widget( "ui.autocomplete", $.ui.autocomplete, {
   options: {
      close: function( event, ui ) {
         if (typeof event.currentTarget == 'undefined') {
            $(this).val("");
            $(this).data('ui-autocomplete').options.select(event, ui);
         }
      }
   }
 });
person user7793758    schedule 24.10.2019

Намерих много лесен начин да го накарам да работи. Отговорите по-горе не ми помогнаха.

Моята входна дефиниция:

<div class="search_box">
<input type="text" class="inp disabled" id="search-user-id" placeholder="Search by user name or email" />
</div>

Дефиницията за автоматично довършване:

$('#search-user-id').autocomplete({
    minChars: 3,
    paramName: 'searchTerm',
    deferRequestBy: 200, // This is to avoid js error on fast typing
    serviceUrl: '${pageContext.request.contextPath}/settings/reset/psw/query',
    type: 'POST',
    onSelect : function(suggestion) {
        showUserData(suggestion.dto);
    }, 
    onSearchError: function (query, jqXHR, textStatus, errorThrown) {
        $('.cev-error-fields.reset-password').find('.error_msg').text(errorThrown).show().fadeOut(7000);
    }
}); 

Задействайте го: Задействам от ajax, дефиниран в друга страница, не поставям ajax тук за простота. В отговора на ajax просто го задействам по следния начин:

        $('#search-user-id').val(username);
        $('#search-user-id').focus();

Проработи.

person lauer    schedule 10.12.2016

person    schedule
comment
наистина остана с това, благодаря много, използвах го, за да задействам промяната, като това $('#someId').data('uiAutocomplete')._trigger('change'); - person NinaNa; 31.08.2014