Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.10.2015, 22:03
Профессор
Отправить личное сообщение для Nanto Посмотреть профиль Найти все сообщения от Nanto
 
Регистрация: 21.12.2010
Сообщений: 243

Обработчики событий
Совсем запутался с обработчиками, вызовами и прочим. И переписывать уже лень - фиг в этом говнокоде разберёшься.
В качестве примера структура куска проблемного кода:
$("#a").on("click", ".b", function() {
		functionA(variable);
	});
}

function functionA(variable) {
	//какой-то код
	$("#с").click(function() {
		functionB(variable);
	});
}

function functionB(variable) {
	console.log(variable);
	//какой-то код
	$("#d").click(function() {
		functionC(variable);
	});	
}

function functionC(variable) {
	//какой-то код
	$("#a").empty();
	$("#a").append('<div class="b"><div>');
}

Суть проблемы - происходит множественный вызов функции functionB. .on тому виной уж, или я где хвосты не подчистил - не знаю. variable - объект который используют многие функции (формируется в зависимости от клика по какому-то элементу).

Если цепочка вызовов функции доходит до последней, и запускается снова - console.log в 14 строке несколько раз подряд выводит variable. Та же фигня происходит если несколько раз дёрнуть функцию functionA, а потом вызвать functionB.
Что это может быть? .on? (без него, кстати, не будет работать - контент ведь динамически генерируется)
Или объект variable каким-то макаром клонируется при каждой его передаче другой функции?

P.S. Элементы по которым отслеживаются клики - не являются родственниками.
P.P.S. Сейчас проверил - это точно .on, сколько раз навызывали functionA - столько раз и выведет variable в functionB

Последний раз редактировалось Nanto, 31.10.2015 в 22:16.
Ответить с цитированием
  #2 (permalink)  
Старый 31.10.2015, 22:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Nanto,
сколько раз кликнули по классу b столько же кликов повисло на элементе с -- если кликнуть теперь по с -- стработают все клики с вызовом функции functionB -- что умножит клики на элементе d.
Ответить с цитированием
  #3 (permalink)  
Старый 31.10.2015, 22:36
Профессор
Отправить личное сообщение для Nanto Посмотреть профиль Найти все сообщения от Nanto
 
Регистрация: 21.12.2010
Сообщений: 243

И ".on", как я уже понял, походу не один такой. Обычный click(); то же самое делает.
Ну и как тут быть? Снимать обработчики? Или выносить обработку событий из функций в document?

Последний раз редактировалось Nanto, 31.10.2015 в 22:38.
Ответить с цитированием
  #4 (permalink)  
Старый 31.10.2015, 22:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Nanto,
зачем вешать одно и тоже несколько раз или почему нужно назначать клики через функцию пока неизвестно что вы делаите могу предложить добавить перед назначением off() $("...").off().click или one() а не on()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элементов и обработчики событий xmlns jQuery 1 18.06.2014 09:40
Где лучше вешать обработчики событий? BETEPAH Events/DOM/Window 5 26.12.2013 21:40
Можно ли вынести обработчики событий в отделные функции Evgeny_Dedov jQuery 1 06.10.2013 17:53
Drag'n'drop обработчики событий zaytsewa Общие вопросы Javascript 7 27.06.2011 14:32
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03