Обработчики событий
Совсем запутался с обработчиками, вызовами и прочим. И переписывать уже лень - фиг в этом говнокоде разберёшься.
В качестве примера структура куска проблемного кода: $("#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,
сколько раз кликнули по классу b столько же кликов повисло на элементе с -- если кликнуть теперь по с -- стработают все клики с вызовом функции functionB -- что умножит клики на элементе d. |
И ".on", как я уже понял, походу не один такой. Обычный click(); то же самое делает.
Ну и как тут быть? Снимать обработчики? Или выносить обработку событий из функций в document? |
Nanto,
зачем вешать одно и тоже несколько раз или почему нужно назначать клики через функцию пока неизвестно что вы делаите могу предложить добавить перед назначением off() $("...").off().click или one() а не on() |
Часовой пояс GMT +3, время: 08:46. |