it-swarm.com.ru

Как вы запускаете событие автозаполнения "select" вручную в jQueryUI?

Я использую автозаполнение jQueryUI, и у меня есть функция, сопоставленная с событием выбора, например:

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

У меня есть особый случай: пользователь сфокусировался на элементе в раскрывающемся меню автозаполнения (но не выбрал его), и мне нужно вручную вызвать событие выбора из другой функции. Это возможно? Если так, то как?

31
Jon Lemmon

Вот что сработало для меня:

$(this).data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}});
37
temuri

Вы могли бы сделать:

$("#someId").trigger("autocompleteselect");
9
Nicola Peluchetti

Вы можете сделать это так, как это делает команда jQuery в своих модульных тестах - см. это answer

6
Rune Vejen Petersen

Просто вызовите следующую функцию

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

1 линия решение

$('.ui-menu-item .ui-corner-all:contains(\"123")').autocomplete({autoFocus:true}).mouseenter().click()
3
cegprakash

Если мы хотим запустить поиск чего-то особенно:

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

или просто

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

$('#search-term').autocomplete({
    ...
    minLength: 0, // with this setting
    ...
});
3
Alliswell
$('#someId').data('uiAutocomplete')._trigger('select');
3
kayz1

Снаружи:

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

Пример настройки триггера выбора при нажатии клавиш горизонтальных стрелок внутри события автозаполнения «open»:

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

К сожалению, этот приятный способ решить эту проблему, помеченный как «успех», не сработал в моем приложении с хромом 140.0.835.200

1
palmic

Я нашел очень простой способ заставить его работать. Ответы выше не сработали для меня. 

Мое определение ввода:

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

Это сработало.

0
lauer