Повторение события внутри другого события
Всем привет. Пишу аякс систему по добавлению комментариев к статьям. Столкнулся с проблемой. При клике на спец ссылке(внешнее событие) появляется формочка добавления комментария. Заполняю - комментарий, жму ок(внутреннее событи), он улетает в базу, все норм. НО! Если не перезагружая страницу добавить еще один комментарий, то он добавится уже дважды. Третий трижды и так далее. ПРи этом вся анимация добавления комментария тоже повторяется. Анимация внешнего события не меняется (Значит оно не повторяется, повторяется только внутреннее). Хотелось бы понять причину такого поведения.
Весь код приводить не буду, чтоб не путать вас, обьясню сам принцип работы скрипта. $(".add_c a:first").click(function(){ //ПРи нажатии кнопки добавить комментарий //...Происходят всякие расчеты положения модального окошка с формочкой, и его плавное появление... $(".add").click(function(event){ //Вложенное событие. При нажатии кнопки добавить в форме: event.preventDefault(); //Отменяем действие по умолчанию //...Далее заносим данные из полей формы в переменные... $.post("/index/ajax.php", {action:"positive", page:page, title:title, comment:comment}, function(data){ $("#m_rez").html(data); //Вносим ответ от обработчика с специальный див (типа ваш отзыв успешно добавлен) $("#ajax_comment").fadeOut(300); //Прячем форму $("#m_rez").css({"top": top + "px", "left": left + "px"}).fadeIn(500); //После чего показываем див с результатом $("#m_rez, #m_bg").delay(3000).fadeOut(1500); //А через 3 сек и его прячем }, "html"); }); }); Гугл о проблемах вложенных событий ничего мне не рассказал |
Цитата:
event.preventDefault(); event.stopPropagation() |
Не помогает =(
Эта строка так-же повторяется вместе со всеми (Проверил непосредственным втыканием alert("123"); после нее) |
return в конце тоже почему-то не помогает.
Вообще хочется понять причину такого поведения. Что именно я не так делаю |
Цитата:
то есть версии либо ajax несколько раз срабатывает либо в coment попадает дважды |
Цитата:
Или Вы новую каждый раз создаете? |
var comment = $("#ajax_comment textarea").val(); ТОесть в переменную попадает значение текстовой области. Каждое повторение она содержит одно и то-же. ТОесть первый раз ввожу 123 - там 123, второй раз 345 - там оба раза 345, третий 987 - там 3 раза 987. ПОвторяется не только аякс, повторяется все с 3 по 11 строку. Пробовал после 7 строчки обнулять содержимое инпутов, не помогает |
var top = $(document).scrollTop() + $(window).height() / 2 - $("#ajax_comment").height() / 2; var left = $(document).width() / 2 - 460; $("#ajax_comment input[name=title], #ajax_comment textarea").val(""); $("#ajax_comment").css({"top": top + "px", "left": left + "px"}).fadeIn(500); $("#m_bg").fadeTo(500,0.7); Появляется обычным fadeIn'ом. Эта часть кода находится во внешнем событии и она не повторяется. Срабатывает только при клике на ссылку как должна |
попробуйте вот так
$(".add").eq(0).click( |
не помогает =(
Все равно вложенное событие клик выполняется несколько раз, хотя я 1 раза нажимаю |
У меня есть проверка перед аякс запросом на заполненость полей. Запрос выполняется только если оба поля заполнены. Внутри запроса(где function(data)) у меня присутствует строка
$("#ajax_comment input[name=title], #ajax_comment textarea").val(""); ТОесть эта строка должна очистить содержимое полей, и при повторении они не пройдут проверку. Но, они проходят и повторяется запрос. Непонимаю(( Если разделить события на 2 отдельных события, то повторений не наблюдается. Но почему-же повторяются вложенные? |
такое ощущение что вот это событие добавляется каждый раз при добавлении комментария-а должно только один раз
поставь перед ним аlert $(".add").click(function(event) |
alert("До"); $(".add").click(function(event){ alert("После"); Так и есть. "До" выскакивает 1 раз только. "После" уже повторяется. Первый раз один раз, второй - два, третий - три и. т. д. Заметил что первый раз запрос обрабатывается дольше, успевает появиться бегущая строка. Остальные разы неуспевает и моментально выскакивает сообщение о успешном добавлении комментария. ПОлучается что кнопка формы как-то накапливает на себе события клика. Первый раз кликнули - выполнился обработчик. Второй раз кликнули - кнопка подумала что кликнули 2 раза и обработчик выполнился 2 раза и так далее. Интересно что не работает строка очистки содержимого формы внутри запроса. Я уже не знаю что предположить, но может эти события как-то параллельно стартуют? Ведь еслиб был цикл, то после очистки переменные получали бы пустые значения, а в них содержатся первоначальные данные. |
Цитата:
Цитата:
fadeOut(1500);эту форму удалять |
Полное удаление и создание формы вновь действительно решило проблему. Видимо вы были правы по поводу нескольких экземпляров. ПРавда в какой строке это происходит - так и осталось для меня загадкой.
|
Цитата:
|
Нет, алерт ДО срабатывает только 1 раз при клике и появлении формы. Несколько раз срабатывает алерт ПОСЛЕ. В принципе роблема уже решена, спасибо за подсказку с формами)
ПОследними строками я просто хотел сказать что интересно все-же почему так работал мой скрипт |
Часовой пояс GMT +3, время: 12:58. |