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

Вс, 27/11/2016 - 12: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 выполняется нормально.

0 Спасибо

Комментарии

Аватар пользователя postgres
2 months 4 недели назад postgres #

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

0 Спасибо
Аватар пользователя VasyOK
2 months 4 недели назад VasyOK #

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

0 Спасибо
Аватар пользователя gun_dose
2 months 4 недели назад gun_dose #

лови его по аякс комплиту

0 Спасибо
Аватар пользователя VasyOK
2 months 4 недели назад VasyOK #

ээээ
как?

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #
$('#ajaxCartUpdate').ajaxComplete(function (event, request, settings) {
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
});
0 Спасибо
Аватар пользователя VasyOK
2 months 4 недели назад VasyOK #

это в отладчик JS или в файл скрипта?

0 Спасибо
Аватар пользователя gun_dose
2 months 4 недели назад gun_dose #

Первый день в друпале что ли? Понятное дело, что отладчик доллары не берёт.

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #

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

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

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

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #
(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')
Выпить яду?

0 Спасибо
Аватар пользователя fairrandir
2 months 3 недели назад fairrandir #

Посчитайте скобки. Чутьё мне подсказывает, что левых больше чем правых.

1 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

в акурат после $('#ajaxCartUpdate')

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #

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

0 Спасибо
Аватар пользователя fairrandir
2 months 3 недели назад fairrandir #

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

0 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

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

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

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

0 Спасибо
Аватар пользователя mbaev
2 months 3 недели назад mbaev #

Хорошо, что боженька создал консоль (f12), жаль только, что не все об ней знаютъ.

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #

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

0 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

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

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #

а по чем это видно?

0 Спасибо
Аватар пользователя fairrandir
2 months 3 недели назад fairrandir #

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

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

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

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #
multpix написал:
ошибка в стр. №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

0 Спасибо
Аватар пользователя fairrandir
2 months 3 недели назад fairrandir #

http://api.jquery.com/ajaxcomplete/
Английским по белому в Additional notes написано, что с версии 1.9 .ajaxComplete() надо цеплять к $(document)
У вас на сайте 2.1. Ой.

0 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

неуверен, но
попробуй это с jquery-1-9-1, и(или) с
$(document)

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #

а как его подцепить? нужно именно 2.1 - без него модуль uc_ajax_cart не пашет с новыми версиями jquery_update

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #

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

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

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

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

$('#ajaxCartUpdate').ajaxComplete
Заменить на
$(document).ajaxComplete

0 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

да

0 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

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

settings.url

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

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

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

0 Спасибо
Аватар пользователя multpix
2 months 3 недели назад multpix #

responseURL undefined, нет его в request

0 Спасибо
Аватар пользователя VasyOK
2 months 3 недели назад VasyOK #
multpix написал:
в объекте settings есть url, который содержит проверяемый тобой 'uc_ajax_cart/show'

вижу. И?

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

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

$(document).ajaxComplete(function (event, request, settings) {
     
      console.log(request.responseURL);
     
      if (request.responseURL.indexOf('uc_ajax_cart/show') >= 0) {
        $('html').detach();
      }
     
});
0 Спасибо