Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Повторение события внутри другого события (https://javascript.ru/forum/jquery/30747-povtorenie-sobytiya-vnutri-drugogo-sobytiya.html)

OlegDegtev 14.08.2012 13:56

Повторение события внутри другого события
 
Всем привет. Пишу аякс систему по добавлению комментариев к статьям. Столкнулся с проблемой. При клике на спец ссылке(внешнее событие) появляется формочка добавления комментария. Заполняю - комментарий, жму ок(внутреннее событи), он улетает в базу, все норм. НО! Если не перезагружая страницу добавить еще один комментарий, то он добавится уже дважды. Третий трижды и так далее. ПРи этом вся анимация добавления комментария тоже повторяется. Анимация внешнего события не меняется (Значит оно не повторяется, повторяется только внутреннее). Хотелось бы понять причину такого поведения.
Весь код приводить не буду, чтоб не путать вас, обьясню сам принцип работы скрипта.
$(".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");
     });
});

Гугл о проблемах вложенных событий ничего мне не рассказал

vadim5june 14.08.2012 14:04

Цитата:

Сообщение от OlegDegtev
НО! Если не перезагружая страницу добавить еще один комментарий, то он добавится уже дважды. Третий трижды и так далее.

попробуйте добавьте после event.preventDefault();
event.preventDefault();  
event.stopPropagation()

OlegDegtev 14.08.2012 14:19

Не помогает =(
Эта строка так-же повторяется вместе со всеми (Проверил непосредственным втыканием alert("123"); после нее)

OlegDegtev 14.08.2012 14:21

return в конце тоже почему-то не помогает.
Вообще хочется понять причину такого поведения. Что именно я не так делаю

vadim5june 14.08.2012 14:32

Цитата:

Сообщение от OlegDegtev
comment:comment

а в comment что при втором нажатии
то есть версии либо ajax несколько раз срабатывает
либо в coment попадает дважды

vadim5june 14.08.2012 14:37

Цитата:

Сообщение от OlegDegtev
 $("#ajax_comment").fadeOut(300);   //Прячем форму

А как потом она появляется?
Или Вы новую каждый раз создаете?

OlegDegtev 14.08.2012 14:48

var comment = $("#ajax_comment textarea").val();

ТОесть в переменную попадает значение текстовой области. Каждое повторение она содержит одно и то-же. ТОесть первый раз ввожу 123 - там 123, второй раз 345 - там оба раза 345, третий 987 - там 3 раза 987. ПОвторяется не только аякс, повторяется все с 3 по 11 строку. Пробовал после 7 строчки обнулять содержимое инпутов, не помогает

OlegDegtev 14.08.2012 14:49

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'ом.
Эта часть кода находится во внешнем событии и она не повторяется.
Срабатывает только при клике на ссылку как должна

vadim5june 14.08.2012 15:00

попробуйте вот так
$(".add").eq(0).click(

OlegDegtev 14.08.2012 15:04

не помогает =(
Все равно вложенное событие клик выполняется несколько раз, хотя я 1 раза нажимаю


Часовой пояс GMT +3, время: 00:04.