Использование текущего селектора в автозаполнении JQuery - PullRequest
2 голосов
/ 15 июля 2010

Я использую виджет автозаполнения пользовательского интерфейса JQuery и хотел бы иметь доступ к текущему селектору, к которому я присоединяю автозаполнение. Я нашел способ доступа к селектору, используя предыдущий вопрос здесь, но функция источника вызывается некорректно.

Мой текущий код выглядит так

$("input[id$=artist]").each(function() {
    e1 = $(this);
    curID = $(this).parent('td').parent('tr').attr('id');       
    e1.autocomplete({
        minLength: 3,
        source: function(request, response) { 
            findSuggestions(request, response, 'artist', artist_cache, curID);
        }
    });
});

Как видите, я получаю текущий селектор и помещаю его в e1. Есть несколько строк с данным входом «Artist», и я хочу иметь возможность узнать идентификатор для каждой строки в методе findSuggestions, но когда метод вызывается, каждой строке присваивается один и тот же идентификатор (который ссылается последний из рядов.

Есть идеи, почему это может происходить? Я неправильно подхожу к этой проблеме?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

Вам нужно определить свою переменную внутри замыкания, чтобы дать ей локальную область видимости, в противном случае вы создаете глобальную переменную

$("input[id$=artist]").each(function() {
    var e1 = $(this);
    var curID = $(this).parent('td').parent('tr').attr('id');       
    e1.autocomplete({
        minLength: 3,
        source: function(request, response) { 
            findSuggestions(request, response, 'artist', artist_cache, curID);
        }
    });
});
2 голосов
/ 15 июля 2010

Вы забыли поставить var перед переменной curID.

Это создает глобальную переменную curID для объекта окна, поэтому каждая функция обратного вызова источника ссылается на один и тот же объект, и, таким образом,значение.

Изменить на

var curID = $(this).parent('td').parent('tr').attr('id');       

Никогда не забывайте ставить var перед объявлением переменной, так как это может быть источником болезненных ошибок, таких как этот.

...