Javascript.RU

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

Двойное событие
Всем доброго времени суток =)
Надеюсь, сможете помочь в нелегком деле))

На сайте событие click отрабатывает (похоже, всегда) по 2 раза. Вот ивой пример с пояснениями:
var clickCount = 0;
	$("#button-cart").one("click", function(event) {
		event.preventDefault();
		++clickCount;
		if (clickCount%2 == 1) {
			console.log(clickCount); //Выводит дважды одно число!
			form = $(this).closest("form");
			data = {"items": {}, "action": "ADD2BASKET"};
			id = form.find(".pid").val();
			quantity = form.find(".qty_input").val();
			data["items"][id] = {new_quantity: quantity};
			$.ajax({
					url: "/ajax/basket.php",
					data: data,
					success: function(result) {
							console.log(result);
							$(".notification .success").html("Товар "+result.last_added+" успешно добавлен в <a href='/personal/cart/'>корзину покупок!</a><a href='#' class='close'></a>");
							$(".notification .success .close").click(function(event) {
									event.preventDefault();
									$(".notification .success").fadeTo("fast", 0).html("");
							});
							$("#cart-total").html(result.fullQuantity+" "+declination("товара", "товаров", "товар", result.fullQuantity)+" на "+result.allSumm+" р.");
							$(".notification .success").show().fadeTo("fast", 1);
							$.scrollTo("#header", 500);
					}
//        return false;
			})
		}
	});
});

Это последний вариант, с вызовом через .one. Результат тот же, функция отрабатывает 2 раза. Кроме того, на строчке 6 в консоль дважды вылетает одно и то же число. У меня закончились соображения по этому поводу, в гугле тоже ничего полезного не нашел.. Надеюсь на вашу помощь)
Вживую, например, тут: http://simtele.ru/catalog/iphone_5s/...2016Gb%20Gold/

Последний раз редактировалось Эллурн, 01.02.2014 в 15:28. Причина: UPD
Ответить с цитированием
  #2 (permalink)  
Старый 01.02.2014, 20:48
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Эллурн
Вживую, например, тут: http://simtele.ru/catalog/iphone_5s/...2016Gb%20Gold/
Начни с простого, тестового примера... Затем начинай усложнять...
Косяк и проявится.
Ответить с цитированием
  #3 (permalink)  
Старый 01.02.2014, 22:23
Аспирант
Отправить личное сообщение для Эллурн Посмотреть профиль Найти все сообщения от Эллурн
 
Регистрация: 31.03.2010
Сообщений: 30

Простой пример я сделал такой:
$(".description").click(function(event) {
		console.log(event);
	})

Результат:
Если посмотреть на timestamp, видно, что клик был сделан 1 раз.

Естественно, пытался в отладчике брейкпоинты ставить, тоже ничего не дало. Сначала обрабатывается мой скрипт, затем лезет в библиотеку jQuery, затем снова в скрипт.
Ответить с цитированием
  #4 (permalink)  
Старый 01.02.2014, 22:46
Аспирант
Отправить личное сообщение для Эллурн Посмотреть профиль Найти все сообщения от Эллурн
 
Регистрация: 31.03.2010
Сообщений: 30

Странную весч нашел (правда, не факт, что поможет):
Кнопка как раз та, что нужна мне. Почему jquery на нее повесился? И может ли это как-то влиять вообще)) На клик по div.description он не вешается так же, как на эту кнопку. Однако, функция все равно отрабатывает 2 раза.
UPD: Кстати, сначала я вешался не на клик по кнопке, а на submit формы. Результат был тот же самый.
Ответить с цитированием
  #5 (permalink)  
Старый 02.02.2014, 09:51
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Либо два вложенных элемента с одним классом, либо ты просто два раза подключил свой скрипт.
__________________
.ня
Ответить с цитированием
  #6 (permalink)  
Старый 02.02.2014, 10:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Эллурн Посмотреть сообщение
Простой пример я сделал такой:
$(".description").click(function(event) {
		console.log(event);
	})
Это не пример, это огрызок.
Тестовый пример должен работать прямо тут в теме.
Ответить с цитированием
  #7 (permalink)  
Старый 02.02.2014, 15:04
Аспирант
Отправить личное сообщение для Эллурн Посмотреть профиль Найти все сообщения от Эллурн
 
Регистрация: 31.03.2010
Сообщений: 30

Сообщение от tenshi Посмотреть сообщение
Либо два вложенных элемента с одним классом, либо ты просто два раза подключил свой скрипт.
Скрипт подключается 1 раз, вложенных элементов нет...
Сообщение от ksa Посмотреть сообщение
Это не пример, это огрызок.
Тестовый пример должен работать прямо тут в теме.
Извиняюсь, немного не понял. Что именно должно тут работать? Примеры типа console.log? Тут они будут отдавать по одному клику. Уточните, пожалуйста, какой нужен пример. А то туплю)
Ответить с цитированием
  #8 (permalink)  
Старый 02.02.2014, 15:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Эллурн
Уточните, пожалуйста, какой нужен пример.
Обычный тестовый пример... Пройдись по темам - их тут валом! Основной их признак - они запускаются прямо тут в теме.

Начнем, например, с этого

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(function (){
	$(".description").click(function(event) {
		alert(1);
	})
});
</script>
</head>
<body>
<p class='description'>Test</p>
</body>
</html>

Сообщение от Эллурн
На сайте событие click отрабатывает (похоже, всегда) по 2 раза.
В тестовом примере все работает как нужно!
Что ты с ним должен сделать, чтобы событие начало срабатывать дважды?
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2014, 18:30
Аспирант
Отправить личное сообщение для Эллурн Посмотреть профиль Найти все сообщения от Эллурн
 
Регистрация: 31.03.2010
Сообщений: 30

Судя по тому, что нашел в интернете, то либо дважды повесить обработчик, либо вложить внутрь элемент с тем же классом. На сайте, с которым я работаю, не обнаружил ни того, ни другого.
Ответить с цитированием
  #10 (permalink)  
Старый 02.02.2014, 20:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Эллурн,
может добавить отмену всплытия чтобы форма не отрабатывала клик
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие onload SP7 Общие вопросы Javascript 4 10.11.2013 23:50
Событие click Гробовщик jQuery 1 31.07.2013 07:28
Двойное событие в одну и туже координату Basota Events/DOM/Window 2 31.08.2012 21:02
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Отловить событие simple Events/DOM/Window 3 11.05.2011 14:20