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

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

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

Есть блок от модуля 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 выполняется нормально.

Комментарии

Аватар пользователя postgres postgres 27 ноября 2016 в 17:44

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

Аватар пользователя VasyOK VasyOK 27 ноября 2016 в 18:26

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

Аватар пользователя gun_dose gun_dose 1 декабря 2016 в 9:52
$('#ajaxCartUpdate').ajaxComplete(function (event, request, settings) {
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
});
Аватар пользователя VasyOK VasyOK 30 ноября 2016 в 0:22

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

Аватар пользователя gun_dose gun_dose 30 ноября 2016 в 7:45

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

Аватар пользователя VasyOK VasyOK 30 ноября 2016 в 21:30
(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')
Выпить яду?

Аватар пользователя VasyOK VasyOK 30 ноября 2016 в 22:17

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 - тут проблемная функция закомментрирована.

Аватар пользователя fairrandir fairrandir 30 ноября 2016 в 22:41

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

Аватар пользователя multpix multpix 1 декабря 2016 в 1:29

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

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

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

Аватар пользователя VasyOK VasyOK 1 декабря 2016 в 0:50

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

Аватар пользователя fairrandir fairrandir 1 декабря 2016 в 9:35

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

Аватар пользователя gun_dose gun_dose 1 декабря 2016 в 9:51

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

Аватар пользователя VasyOK VasyOK 1 декабря 2016 в 14:19

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

Аватар пользователя VasyOK VasyOK 1 декабря 2016 в 15:22

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

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

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

Аватар пользователя gun_dose gun_dose 1 декабря 2016 в 16:20

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

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

Аватар пользователя VasyOK VasyOK 2 декабря 2016 в 14:16

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();
      }
     
});