Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2012, 13:56
Интересующийся
Отправить личное сообщение для OlegDegtev Посмотреть профиль Найти все сообщения от OlegDegtev
 
Регистрация: 07.08.2012
Сообщений: 13

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

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

Последний раз редактировалось OlegDegtev, 14.08.2012 в 14:00.
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2012, 14:04
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от OlegDegtev
НО! Если не перезагружая страницу добавить еще один комментарий, то он добавится уже дважды. Третий трижды и так далее.
попробуйте добавьте после event.preventDefault();
event.preventDefault();  
event.stopPropagation()
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2012, 14:19
Интересующийся
Отправить личное сообщение для OlegDegtev Посмотреть профиль Найти все сообщения от OlegDegtev
 
Регистрация: 07.08.2012
Сообщений: 13

Не помогает =(
Эта строка так-же повторяется вместе со всеми (Проверил непосредственным втыканием alert("123"); после нее)
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2012, 14:21
Интересующийся
Отправить личное сообщение для OlegDegtev Посмотреть профиль Найти все сообщения от OlegDegtev
 
Регистрация: 07.08.2012
Сообщений: 13

return в конце тоже почему-то не помогает.
Вообще хочется понять причину такого поведения. Что именно я не так делаю
Ответить с цитированием
  #5 (permalink)  
Старый 14.08.2012, 14:32
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от OlegDegtev
comment:comment
а в comment что при втором нажатии
то есть версии либо ajax несколько раз срабатывает
либо в coment попадает дважды
Ответить с цитированием
  #6 (permalink)  
Старый 14.08.2012, 14:37
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от OlegDegtev
 $("#ajax_comment").fadeOut(300);   //Прячем форму
А как потом она появляется?
Или Вы новую каждый раз создаете?

Последний раз редактировалось vadim5june, 14.08.2012 в 14:39.
Ответить с цитированием
  #7 (permalink)  
Старый 14.08.2012, 14:48
Интересующийся
Отправить личное сообщение для OlegDegtev Посмотреть профиль Найти все сообщения от OlegDegtev
 
Регистрация: 07.08.2012
Сообщений: 13

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

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

Последний раз редактировалось OlegDegtev, 14.08.2012 в 14:54.
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2012, 14:49
Интересующийся
Отправить личное сообщение для OlegDegtev Посмотреть профиль Найти все сообщения от OlegDegtev
 
Регистрация: 07.08.2012
Сообщений: 13

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

Последний раз редактировалось OlegDegtev, 14.08.2012 в 14:54.
Ответить с цитированием
  #9 (permalink)  
Старый 14.08.2012, 15:00
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

попробуйте вот так
$(".add").eq(0).click(
Ответить с цитированием
  #10 (permalink)  
Старый 14.08.2012, 15:04
Интересующийся
Отправить личное сообщение для OlegDegtev Посмотреть профиль Найти все сообщения от OlegDegtev
 
Регистрация: 07.08.2012
Сообщений: 13

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
один setInterval внутри другого setInterval-а dadli Общие вопросы Javascript 5 20.03.2012 17:16
Передача события обработчику внутри класса SuperDennis Events/DOM/Window 4 29.02.2012 17:41
Как рандомно запустить js внутри другого js? fonzo24 Общие вопросы Javascript 3 21.11.2011 12:31
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01
Перемещение div внутри другого Danila74 jQuery 1 24.09.2009 17:31