Что-то у меня бихэйвор после аякса разаттачивается

Главные вкладки

Аватар пользователя gun_dose gun_dose 5 августа 2016 в 21:51

Использую модуль uc_ajax_cart, темизировал его блок и сделал так, что по умолчанию в блоке видна только сводка, а по клику на слово "Корзина" всплывает попап с её содержимым, по клику на крестик или в фон, попап закрывается, всё стандартно в общем. Сперва всё работает нормально, но после того, как корзина обновляется через ajax, закрытие попапа не работает и юзер обречён либо идти на оформление заказа, либо перезагружать страницу. Т.е. добавив товар в корзину и открыв её попап, она больше не закрывается. Если же перезагрузить страницу, то всё открывается и закрывается, как в лучших домах Парижа.
Код:

(function ($, Drupal, window, document) {

  'use strict';

  Drupal.behaviors.my_custom_behavior = {
    attach: function (context, settings) {
$('.cart-link').click(function (e) {
        e.preventDefault();
        $('#cart-overlay').fadeIn(500);
      });
      $('#closinger, #cart-overlay', context).click(function (e) {
        if ($(e.target).closest('#cart-items').length == 0) {
          $('#cart-overlay').fadeOut(500);
        }
      });
};

})(jQuery, Drupal, this, this.document);

Если надо, могу дать ссылку на сайт. Буду рад любой помощи. Спасибо заранее не говорю, поставлю спасибку вам на коммент только по факту.

Лучший ответ

Комментарии

Аватар пользователя bumble bumble 5 августа 2016 в 22:53
1

Попробуй так:

(function ($) {
  Drupal.behaviors.my_custom_behavior = {
    attach: function (context, settings) {

      $('.cart-link').once().click(function (e) {
        e.preventDefault();
        $('#cart-overlay').fadeIn(500);
      });

      $('#closinger, #cart-overlay', context).once().click(function (e) {
        if ($(e.target).closest('#cart-items').length) {
          $('#cart-overlay').fadeOut(500);
        }
      });

    }
  };
})(jQuery);

..ну, или давай ссылку Lol

Аватар пользователя gun_dose gun_dose 6 августа 2016 в 10:02

Не работает, что вполне логично - once нужен для того, чтобы бихэйворы не аттачились к одним и тем же элементам многократно. У меня же проблема в том, что он не аттачится вообще. Ссылка teploexpert.com

Аватар пользователя sergeybelya sergeybelya 6 августа 2016 в 23:47
1

https://habrahabr.ru/post/161039/
https://www.lullabot.com/articles/understanding-javascript-behaviors-in-...
Или просто используйте делегирование событий в jquery, тогда можно вообще не использовать бихейворы друпала:
http://api.jquery.com/delegate/

Аватар пользователя gun_dose gun_dose 7 августа 2016 в 11:04

Спасибо, delegate сработал. Но так и не понял, почему не работало с бихэйворами. В этом же блоке код срабатывал по открытию колорбокса, а вот по обновлению корзины не срабатывал.