2010-07-15 2 views
2

Я использую виджет автозаполнения JQuery UI и хотел бы иметь доступ к текущему селектору, к которому я прикрепляю автозаполнение. Я нашел способ получить доступ к селектору, используя предыдущий вопрос здесь, но функция-источник вызывается с ошибкой.Использование текущего селектора в автозаполнении 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. Существует несколько строк с данным «художником», и я хочу знать идентификатор для каждой строки в методе findSuggestions, но при вызове метода каждой строке присваивается одинаковый идентификатор (который ссылается на последний строки.

Любая идея, почему это может происходить? Могу ли я приближаемся эту проблему неправильно?

Спасибо!

ответ

3

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

$("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); 
     } 
    }); 
}); 
+0

Ах, конечно! Всегда простая ошибка, и всегда заставляю меня чувствовать себя глупым ... спасибо за помощь !! –

2

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

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

Изменения в

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

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

Смежные вопросы