![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
InfMag |
|
||||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
Имеется вот такой код:
Всё бы ничего, вроде ничего необычного, но последняя команда $("#hforms_b_"+KEY).click(function(){select_form(KEY);}); выполняется неправильно! Получается что происходит на всех ссылках клик как по последней, аля: $("#hforms_b_form5").click(function(){select_form("form5");}); При том что если сделать то же самое, но статично - всё работает как положено:
В чём собственно загвоздка? Я что-то делаю неправильно? Или это действительно нелогично? Это сообщение отредактировал(а) InfMag - 2.10.2009, 14:50 |
||||
|
|||||
unicross |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 5 Всего: 53 |
InfMag, это нормальное явление и к jQuery особого отношения не имеет. Проблема в том, что при замыкании сохраняется контекст (ссылка на переменную KEY, а не ее значение). Подробности здесь: Один [[Scope]] на "всех" Второй пример - это ваш случай...
![]() Это сообщение отредактировал(а) unicross - 2.10.2009, 17:13 |
|||
|
||||
brother79 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: 1 Всего: 6 |
Не совсем понял в каком месте, но поидее это должно работать в такой схеме:
По крайней мере у меня с такой схемой проблем не было. Ещё по поводу массивов: Я бы сделал объектами так:
Надеюсь не перепутал пор-к параметров e,i |
||||
|
|||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 4 Всего: 22 |
Дали молоток, забыли показать как пользоваться. unicross все сказал, надо только переложить на другие рельсы.
Суть в том, что "внутренности" функции в клике интерпретируются не в момент объявления, а в момент выполнения. А так как в старом варианте KEY - переменная, последнее значение которой "form5", то все клики будут передавать в функции именно ее. "Чистым" кодом делается через замыкания, а в jQuery есть превосходный механизм, скрывающий замыкание, надо только передать "туда" свои переменные.
|
|||
|
||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
IDVsbruck, сработало! Большое спасибо! (+1)
Также по вашим советам перевёл на объекты массив свой. Я кстати сразу плеваться начал, когда у меня типичная конструкция не заработала:
Это сообщение отредактировал(а) InfMag - 5.10.2009, 15:45 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |