Автозаполнение JQuery UI на одной странице - PullRequest
0 голосов
/ 01 апреля 2012

Я использую jQuery UI Autocomplete . Я использую его на трех разных входах. Итак, у меня есть:

идентификатор входа 1
автозаполнение с данными XML 1

идентификатор входа 2
автозаполнение с данными xml 2

идентификатор входа 3
автозаполнение с данными xml 3

У меня также есть такое событие:

$(".ui-autocomplete li a").live("click",function(){

    doSearch($(this).text());

});

Проблема в том, что это событие происходит на всех трех этапах автозаполнения.

Что я должен изменить в коде события или в другом месте, чтобы привязать событие к определенному вводу / автозаполнению. Поэтому я хочу, чтобы события 1, 2, 3 соответствовали различным наборам ввода / автозаполнения.

1 Ответ

1 голос
/ 01 апреля 2012

Если я правильно понимаю ваш вопрос, вы хотите передать либо элемент автозаполнения, либо его индекс в doSearch(), в дополнение к тексту элемента.

Передача элемента автозаполнения так же проста, как и использование closest () :

function doSearch(autocomplete, itemText)
{
    // ...
}

$(".ui-autocomplete li a").live("click", function() {
    var $this = $(this);
    doSearch($this.closest(".ui-autocomplete"), $this.text());
});

Передача его индекса немного сложнее и может быть достигнута с помощью index () :

function doSearch(autocompleteIndex, itemText)
{
    // ...
}

$(".ui-autocomplete li a").live("click", function() {
    var $this = $(this);
    doSearch($this.closest(".ui-autocomplete").index(".ui-autocomplete"),
        $this.text());
});

Примечание впередавая, что bind(), delegate() и live() были заменены на on () начиная с jQuery 1.7, так что вы можете использовать его для регистрации вашего обработчика:

$(document).on("click", ".ui-autocomplete li a", function() {
    // ...
});

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

...