Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   закрытие при клике в body (https://javascript.ru/forum/dom-window/45553-zakrytie-pri-klike-v-body.html)

Mizter Egoist 05.03.2014 14:40

закрытие при клике в body
 
Добра всем!
Делаю малую корзину в битриксе, пытаюсь обновлять значения с помощью аякса, вроде все получается, кроме одного.
Вот что написалось:
$(document).ready(function(){
	showBasketLine();
	showBasketSmall();
	$(".storeBuy a").click(showBasketLine);
});
function showSmallBasket() {
	if($(".basketSmallBox").is(":visible")){
		$(".basketSmallBox").removeClass("shower").hide();
	} else if ($(".basketSmallBox").is(":hidden")) {
		showBasketSmall();
		$(".basketSmallBox").addClass("shower").show();
	}
}
function showBasketLine() {
	$.ajax({
		url: "/bitrix/templates/imperia.Pallet/include_areas/ajax.handler.php",
		type: "GET",
		cache: true,
		timeout: 1000,
		data: "block=basketLine",
		dataType: "html",
		success: function(data){
			$('.basketLineBox').html(data)
		}
	});
}
function showBasketSmall() {
	$.ajax({
		url: "/bitrix/templates/imperia.Pallet/include_areas/ajax.handler.php",
		type: "GET",
		cache: true,
		timeout: 1000,
		data: "block=basketSmall",
		dataType: "html",
		success: function(data){
			$('.basketSmallBox').html(data)
		}
	});
}

showSmallBasket() это функция вызываемая этой ссылкой
<a href="<?=$arParams["PATH_TO_BASKET"]?>" onclick="showSmallBasket(); return false;">...</a>
. Когда жмешь на ссылку, появляется блок с малой корзиной, жмешь на ссылку еще раз и малая корзина закрывается, и осталось только доделать закрытие малой корзины при щелчке в любом месте кроме малой корзины.
Помогите мне пожалуйста доделать.

danik.js 05.03.2014 14:47

В момент открытия корзины навешивать обработчик click на body (или на document). В обработчике проверяешь предков - если есть корзина (то есть клик пришелся по корзине), то игнорируешь клик. Иначе закрываешь корзину.
По закрытию корзины снимаешь обработчик.

Mizter Egoist 05.03.2014 14:56

Вот html
<div id="headerTel" class="basketHeader">
	<div class="basketLineBox">
		<div class="basketLine">
			<a href="cart" onclick="showSmallBasket(); return false;">В корзине <b>1</b> товар</a>
		</div>
	</div>
	<div class="basketSmallBox" style="display: none;">
		<div class="basketSmall">
			<h3>Позиции в Вашей корзине:</h3>
			<div class="basketSmallConteiner">
				<a href="/store/pallet/poddon_1200kh800_gost_9078/" title="Поддон 1200х800 ГОСТ 9078-84">Поддон 1200х800 ГОСТ 9078-84</a>
				Цена: 120.00 руб.
				Количество: 21.00
			</div>
			<form method="get" action="/p/cart">
				<input type="submit" value="Изменить количество">
			</form>
			<form method="get" action="/p/order">
				<input type="submit" value="Оформить заказ">
			</form>
		</div>
	</div>
</div>

danik.js, Я кучу всего перепробовал, в голове путаница, можете пожалуйста написать пример?

danik.js 05.03.2014 15:20

Цитата:

Сообщение от Mizter Egoist
можете пожалуйста написать пример

Не. Сегодняшняя квота бесплатного кода вышла ))
Мож кто поможет. А лучше не жди а пробуй сам. Хотя бы попытайся (и показывай код)

Mizter Egoist 05.03.2014 15:29

На сегодня мои мозги зашились. Тогда если мне завтра квота не выпадет, буду дальше танцевать с бубном.

ruslan_mart 06.03.2014 05:14

Можно сделать проще: при открытии корзины, ставить на body фиксированный прозрачный div на весь экран, при клике на этот div закрыть корзину и удалять этот div.

Sly_Enigma 06.03.2014 13:52

а не проще ли всего написать event.stopPropagation()?

kostyanet 06.03.2014 15:03

По-моему битрикс такая байда, где никакой корзины не надо. Или при чем тут вообще битрикс?

По теме. Слушайте предыдущего оратора. Всего лишь требуется не пропустить событие к боди и тогда в функции на щелчке по туловищу кроме прочего тупо вырубать заранее известный контейнер из видимости.

kostyanet 06.03.2014 15:07

А в той ссылке - по которой типа щелкают чтобы закрыть типа корзину - допускать это самое событие до туловища. Улавливаете?

Про битрикс. Что такое корзина? Это фильтр из всего ассортимента по критерию активный заказ больше 0.

Mizter Egoist 07.03.2014 09:32

$(document).ready(function(){
	showBasketLine();
	showBasketSmall();
	$(".storeBuy a").click(showBasketLine);
});
$("html").click(function() {
	if($(".basketSmallBox").is(":visible")){
		$(".basketSmallBox").removeClass("shower").hide();
	}
});
function showSmallBasket(event) {
	if($(".basketSmallBox").is(":visible")){
		$(".basketSmallBox").removeClass("shower").hide();
	} else if ($(".basketSmallBox").is(":hidden")) {
		showBasketSmall();
		$(".basketSmallBox").addClass("shower").show();
		event.stopPropagation();
	}
}
function showBasketLine() {
	$.ajax({
		url: "/bitrix/templates/imperia.Pallet/include_areas/ajax.handler.php",
		type: "GET",
		cache: true,
		timeout: 1000,
		data: "block=basketLine",
		dataType: "html",
		success: function(data){
			$('.basketLineBox').html(data)
		}
	});
}
function showBasketSmall() {
	$.ajax({
		url: "/bitrix/templates/imperia.Pallet/include_areas/ajax.handler.php",
		type: "GET",
		cache: true,
		timeout: 1000,
		data: "block=basketSmall",
		dataType: "html",
		success: function(data){
			$('.basketSmallBox').html(data)
		}
	});
}

Не работает((


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