Jquery внутри Ajax не выполняется. Или я чего-то не знаю.

27 ноября 2016 в 15:17
Аватар пользователя VasyOK VasyOK 0 33

Есть блок от модуля uc_ajax_cart. Внутри него пытаюсь вывести JQ аккордеоном некую информацию.

Код выдаваемый блоком с моими правками примерно такой:

<div id="ajaxCartUpdate" class="load-on-view ajax-cart-processed">
   
    <div class="skolko acc-place">
      <div class="acc-header"><span class="num-items">2</span> товара</div>
      <div class="acc-content"><!-- Тут будет выводиться информация--></div>      
    </div>  
   
</div>

script.js:

(function ($) {
 Drupal.behaviors.underwearTheme = {
  attach: function(context, settings) {        
   
    $( ".acc-place" ).accordion({  
      active: false,
      collapsible: true,
      heightStyle: "content",      
      header: ".acc-header"
    });      
   
  }
 };
 
})(jQuery);

Проблема. Внутри div id="ajaxCartUpdate" не выполняется Jquery приведенный выше. В чем причина и можно ли это побороть?
За пределами этой конструкции Jquery выполняется нормально.

Комментарии

Мало информации вы дали, но судя по всему когда выполняется ваш behaiviors блок корзины еще не загружен, поскольку наверное делается он в $(document).ready().

27 ноября 2016 в 17:44

Сделал $(document).ready() лучше нестало
JS файл вот http://florange-konsultant.ru/sites/all/themes/underwear/js/script.js
http://florange-konsultant.ru/test там "1 позиция" - гармошка. Значит js файл все таки работает.
А вот в корзине вверху не работает Sad
Должно работать после того, как что-то в корзину положишь.

27 ноября 2016 в 18:26
$('#ajaxCartUpdate').ajaxComplete(function (event, request, settings) {
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
});
1 декабря 2016 в 9:52

Хорошо, а куда именно этот код вписывать?
Во-общето я пытаюсь сделать, чтобы показывался список товаров по нажатию на надпись в корзине. И это могу сделать без jquery.
Но реально блин интересно почему оно не выполняется? Может ему условия какие-то надо?

30 ноября 2016 в 0:22

Пиши этот код в бихэйвор. И кстати, без jQuery пользоваться бихэйворами и ловить аякс как-то ну совсем не сподручно

30 ноября 2016 в 7:45
(function ($) {
 Drupal.behaviors.underwearTheme = {
  attach: function(context, settings) {        
   
    $('#ajaxCartUpdate').ajaxComplete(function (event, request, settings) {
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
             
    $( ".acc-place" ).accordion({  
      active: false,
      collapsible: true,
      heightStyle: "content",      
      header: ".acc-header"      
    });      
   
  }
 };
})(jQuery);

Если так прописываю - отваливаются все функции которые идут после $('#ajaxCartUpdate')
Выпить яду?

30 ноября 2016 в 21:30

http://florange-konsultant.ru/sites/all/themes/underwear/js/script.js
Понял для себя что столько на разные сайты эти jq конструкции вставляю, но не понимаю когда надо ставить ";" после "}"

Чуть переделал. Все равно не работает все что после $('#ajaxCartUpdate'). Почему?

(function ($) {
 Drupal.behaviors.underwearTheme = {
  attach: function(context, settings) {        
   
    $('#ajaxCartUpdate').ajaxComplete(function (event, request, settings) {
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
    };  
     
             
    $( ".acc-place" ).accordion({  
      active: false,
      collapsible: true,
      heightStyle: "content",      
      header: ".acc-header"      
    });        
   
  }
 };
 
})(jQuery);

http://florange-konsultant.ru/sites/all/themes/underwear/js/script.js - тут проблемная функция закомментрирована.

30 ноября 2016 в 22:17

ajaxComplete - круглая скобочка открывается, и... не закрывается.
Есть один известный метод проверять скобки. Читаете код. Видите открывающую скобку - загибаете палец. Видите закрывающую - отгибаете. Не хватает пальцев - переписываете код.

30 ноября 2016 в 22:41

так, а чем писать то тогда?
одной рукой?
ногой?

Можно конешн зарубки на мониторе делать...
или на обоях галок рисовать...

но те у кого закончились пальцы, мониторы и обои, те юзают JSHint
)))))

1 декабря 2016 в 1:29

Ок попробую перефразировать.
Вот отладчик,
выбираю js файл,
задаю 2 точки: $('#ajaxCartUpdate') и $( ".acc-place" ).accordion
перезагружаю страничку
3 раза жму на Play
вижу что аккордеон по нажатию на надпись в корзине работает
Но в реале что-то аккордеону мешает. Как определить что? Если глупость делаю - не стесняйтесь.
vidik

1 декабря 2016 в 0:50

1. Продолбанные скобки.
2. ЕМНИП, ajaxcomplete цепляется к document, а не к элементу, но могу заблуждаться.
3. Ajaxcomplete вообще по идее не нужен, так как бихэйвиоры аттачятся и после ajax запросов.
4. Как можно игнорировать ошибки в консоли?

1 декабря 2016 в 9:35

Да, точняк, я скинул код без одной скобки. Не углядел, когда копировал из проекта. Сейчас отредактирую коммент.

1 декабря 2016 в 9:51

multpix wrote:

ошибка в стр. №6 request is undefined

Это как-то проясняет?

$('#ajaxCartUpdate').ajaxComplete(function (event, request, settings) {
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) { /*Строка 6 вот она*/
        $('html').detach();
      }
    });

http://florange-konsultant.ru/sites/all/themes/underwear/js/script.js

1 декабря 2016 в 14:19

Заменить
(function ($) {
Drupal.behaviors.underwearTheme = {
attach: function(context, settings) {

на
jQuery(document).ready(function($){

?
Если так то все равно не работает.

1 декабря 2016 в 15:22

Может быть там с другого урла респонс приходит, т.к. у меня заточено под событие показа. Я уже и не помню точно, полгода назад делал. Чтобы отловить, в обработчике аякс комплита добавь
console.log(request.responseURL);
И смотри, откуда приходит нужный респонс.

И да, я думаю, понятно, что в моём коде работоспособность будет выражаться во внезапном исчезновении содержимого страницы))

1 декабря 2016 в 16:20

multpix wrote:

в объекте settings есть url, который содержит проверяемый тобой 'uc_ajax_cart/show'

вижу. И?

gun_dose wrote:

Чтобы отловить, в обработчике аякс комплита добавь

Добавил. Так?

$(document).ajaxComplete(function (event, request, settings) {
     
      console.log(request.responseURL);
     
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
     
});
2 декабря 2016 в 14:16