Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.08.2012, 15:16
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

Событие click вызывается несколько раз. Почему?
Здравсвуйте!

Даже не знаю как написать, чтобы было понятно.
Наверное лучше показать на примере.

Заходим сюда http://rusbody.com/photonew/1.html и жмём на ссылку "Открыть модальное окно" Во сплывшем окне, полистайте пару раз фото (вперед, назад) и закройте модальное окно.

Потом если вы ещё раз нажмёте на ссылку "Открыть модальное окно" то она будет загружать два раза вподряд - В этом и есть косяк.


Вот код

$(document).ready(function(){
		// ставим ссылки
		photossilki();
		
			 
		  
	  
function photocontent(link,pid) {
				$.ajax({
				  type: 'POST',
				  url: link,
				  data: {pid: "pid"},
				  success: function(data){
					$(".rcontent").html(data + "<div class='photo-load'></div>");
					window.location.hash = "photo_" + pid;
					$(".body2").css("height", $(document).height()).show();
					$(".photo-load").hide();
					photossilki();
					//alert("ok");
				  },
				  error: function(xhr, textStatus, error){
					  $(".rcontent").html(xhr.statusText);
				  }
				});
				
					
			};
	  
function photossilki() {	
		
	      $("a.pr").click(function(){			
 		    $(".body").css("overflow", "hidden");  			
			var pid = $(this).attr("id");
			var link = $(this).attr("href");
			$(".body2").show();	
			$(".photo-load").show();
			//$(".rcontent").html("Загрузка..."); 
			
			photocontent(link,pid);
			return false;
	      });
		  
		  }
Ответить с цитированием
  #2 (permalink)  
Старый 20.08.2012, 15:53
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

просто в порядке предположения, может и дурацкого: а не происходит ли $(document).ready() при загрузке аяксового контента?
Ответить с цитированием
  #3 (permalink)  
Старый 20.08.2012, 15:55
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

А! невнимательность же, извините.
В функции photocontent вызов функции photossilki, в которой обработчик на клик навешивается ещё раз.
http://api.jquery.com/one/
должно решить проблему.

Последний раз редактировалось LittlePony, 20.08.2012 в 15:57.
Ответить с цитированием
  #4 (permalink)  
Старый 20.08.2012, 16:04
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

Цитата:
photossilki, в которой обработчик на клик навешивается ещё раз
Да именно в этом и вся загвоздка! Эту функцию я вешаю, чтобы на ссылки повесить события. как решить проблему?

Спасибо за быстрый ответ, но ONE проблему не решило

Последний раз редактировалось rusbody, 20.08.2012 в 16:06.
Ответить с цитированием
  #5 (permalink)  
Старый 20.08.2012, 16:13
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

Сообщение от rusbody Посмотреть сообщение
Эту функцию я вешаю, чтобы на ссылки повесить события.
На новые ссылки, подгруженные аяксом? Тогда нужно не .click() использовать, а .live():
$("a.pr").live("click",function(){…})
Ответить с цитированием
  #6 (permalink)  
Старый 20.08.2012, 16:42
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

тоже не помогло, первый раз работает, а на новые ссылки не срабатывает
Ответить с цитированием
  #7 (permalink)  
Старый 20.08.2012, 17:05
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

а что-то я не вижу новых ссылок с классом pr.
Что вообще должно происходить? Какой результат ожидается?
Ответить с цитированием
  #8 (permalink)  
Старый 20.08.2012, 17:08
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

Всё работает, просто когда пытаешься открыть второй раз модальное окно, то оно загружается несколько раз...
Ответить с цитированием
  #9 (permalink)  
Старый 20.08.2012, 19:01
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

rusbody, Танцы c Бубном :
function photossilki() {   
  $("a.pr").one('click', function(){
Ответить с цитированием
  #10 (permalink)  
Старый 20.08.2012, 21:39
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

Deff пробовал, всё равно несколько раз загружется
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
live click выполняется несколько раз hara jQuery 9 09.06.2010 10:58
Как заставить событие сработать один раз GRean Javascript под браузер 4 07.06.2010 00:29
Почему событие срабатывает один раз? igsavenko jQuery 6 03.03.2010 09:26
Повесить событие click (jQuery) на весь документ, кроме нескольких элементов dabutch Events/DOM/Window 2 12.11.2009 19:52
На ссылках div-а вызывается событие mouseOut для div-а mstdmstd Events/DOM/Window 1 30.10.2009 20:18