закрытие при клике в 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>. Когда жмешь на ссылку, появляется блок с малой корзиной, жмешь на ссылку еще раз и малая корзина закрывается, и осталось только доделать закрытие малой корзины при щелчке в любом месте кроме малой корзины. Помогите мне пожалуйста доделать. |
В момент открытия корзины навешивать обработчик click на body (или на document). В обработчике проверяешь предков - если есть корзина (то есть клик пришелся по корзине), то игнорируешь клик. Иначе закрываешь корзину.
По закрытию корзины снимаешь обработчик. |
Вот 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, Я кучу всего перепробовал, в голове путаница, можете пожалуйста написать пример? |
Цитата:
Мож кто поможет. А лучше не жди а пробуй сам. Хотя бы попытайся (и показывай код) |
На сегодня мои мозги зашились. Тогда если мне завтра квота не выпадет, буду дальше танцевать с бубном.
|
Можно сделать проще: при открытии корзины, ставить на body фиксированный прозрачный div на весь экран, при клике на этот div закрыть корзину и удалять этот div.
|
а не проще ли всего написать event.stopPropagation()?
|
По-моему битрикс такая байда, где никакой корзины не надо. Или при чем тут вообще битрикс?
По теме. Слушайте предыдущего оратора. Всего лишь требуется не пропустить событие к боди и тогда в функции на щелчке по туловищу кроме прочего тупо вырубать заранее известный контейнер из видимости. |
А в той ссылке - по которой типа щелкают чтобы закрыть типа корзину - допускать это самое событие до туловища. Улавливаете?
Про битрикс. Что такое корзина? Это фильтр из всего ассортимента по критерию активный заказ больше 0. |
$(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. |