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

Как получить элемент ввода, запускающий виджет автозаполнения jQuery?

У меня есть несколько полей ввода, которые улучшены с помощью функции автозаполнения jQuery. Как получить соответствующее поле ввода при срабатывании события выбора?

<input name="1" value="">
<input name="2" value="">
<input name="3" value="">

$('input[type=text]').autocomplete({
    source: 'suggestions.php',
    select: function(event, ui) {
        // here I need the input element that have triggered the event
    }
});
4b9b3361

Ответ 1

Попробуйте использовать $(this)

$('input[type=text]').autocomplete({
    source: 'suggestions.php',
    select: function(event, ui) {
        // here I need the input element that have triggered the event
        alert($(this).attr('name'));
    }
});

Ответ 2

Я использовал анонимную функцию для параметра source, а $(this) внутри него ссылался на функцию, а не на элемент, запускающий ее. Мне пришлось использовать $(this.element).

Окончательный код закончился аналогично этому (я упростил его для демонстрационных целей):

$( ".regionsAutocomplete" ).autocomplete({
    source: function(request, response){

        //The next line is the important one for this example
        var input = this.element;
        $(input).css('color','red');

        var data = {'foo':'bar'};
        $.ajax({
            'url': ajaxurl,
            'data': data,
            'method': "POST",
            'dataType': "json",
            'success': function(data) {
                response(data);
            }
        });
    }
});

Ответ 3

Вы можете использовать $(this) или event.target.

Затем вы можете получить имя с помощью $(this).prop('name') или event.target.name.

демонстрация

Ответ 4

Насколько я могу судить по этому примеру, вам не понадобится $(). this будет работать отлично, поскольку имя является определенным атрибутом.

this.name

Ответ 5

Используйте $(this)

 select: function(event, ui) {
        $(this).attr('name');
    }