jQuery-ui / auto-complete / getJSON - Как передать идентификатор элемента во внешний PHP

Я привязываю автозаполнение jQuery-ui к нескольким элементам на моей странице, так как я хочу, чтобы автозаполнение было с одинаковым набором опций в разных полях. Что-то вроде:

<input class='myclass' id='myid1' name='field1' type='text' />
<input class='myclass' id='myid2' name='field2' type='text' />
<input class='myclass' id='myid3' name='field3' type='text' />

Я использую опцию "Multiple Remote" из jquery-ui autocomplete, поэтому javascript выглядит примерно так:

$(".myclass")
    // don't navigate away from the field on tab when selecting an item
        // don't navigate away from the field on tab when selecting an item
        .bind( "keydown", function(event) {
            if (event.keyCode === $.ui.keyCode.TAB &&
                $(this).data("autocomplete").menu.active) {
                event.preventDefault();
            }
        })
        .autocomplete({
            source: function( request, response ) {
                $.getJSON("search.php"
                         ,{ term:extractLast(request.term) }
                         ,response);
            },
            search: function() {
                // custom minLength
                var term = extractLast(this.value);
                if (term.length < 1) {
                    return false;
                }
            },
            focus: function() {
                // prevent value inserted on focus
                return false;
            },
            select: function( event, ui ) {
                var terms = split( this.value );
                // remove the current input
                terms.pop();
                // add the selected item
                terms.push(ui.item.value);
                // add placeholder to get the comma-and-space at the end
                terms.push("");
                this.value = terms.join(", ");
                return false;
            }
        });

Все работает очень хорошо. Но я хочу передать идентификатор в качестве второго параметра getJSON. Как я могу сделать это?

Я знаю, как добавить второй параметр в оператор $.getJSON, но я не могу получить "идентификатор" триггера события. Я пробовал $(this).attr('id'), но он дал мне неопределенное значение. Какие-либо предложения?

Благодарю.

1 ответ

Решение

Быть в курсе, что this внутри обратного вызова "source" находится экземпляр плагина, а не элемент INPUT.

Ссылка на INPUT фактически сохраняется в экземпляре плагина в свойстве "element".
Сделай это так:

source: function( request, response ) {
     var inputID = this.element.attr('id');
     $.getJSON("search.php"
        ,{ term:extractLast(request.term), id: inputID }
        ,response);
},

DEMO

Другие вопросы по тегам