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

Аватар пользователя VasyOK

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

Модули и темы:
Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя postgres
postgres 11 месяцев назад

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

Аватар пользователя gun_dose
gun_dose 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

ээээ
как?

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

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

Аватар пользователя gun_dose
gun_dose 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

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

Аватар пользователя gun_dose
gun_dose 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад
(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')
Выпить яду?

Аватар пользователя fairrandir
fairrandir 11 месяцев назад
1

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

Аватар пользователя multpix
multpix 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

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 11 месяцев назад

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

Аватар пользователя multpix
multpix 11 месяцев назад

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

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

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

Аватар пользователя mbaev
mbaev 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

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

Аватар пользователя multpix
multpix 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

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

Аватар пользователя fairrandir
fairrandir 11 месяцев назад

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

Аватар пользователя gun_dose
gun_dose 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад
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

Аватар пользователя fairrandir
fairrandir 11 месяцев назад

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

Аватар пользователя multpix
multpix 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

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

Аватар пользователя VasyOK
VasyOK 11 месяцев назад

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

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

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

Аватар пользователя gun_dose
gun_dose 11 месяцев назад

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

Аватар пользователя multpix
multpix 11 месяцев назад

да

Аватар пользователя multpix
multpix 11 месяцев назад

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

settings.url

Аватар пользователя gun_dose
gun_dose 11 месяцев назад

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

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

Аватар пользователя multpix
multpix 11 месяцев назад

responseURL undefined, нет его в request

Аватар пользователя VasyOK
VasyOK 11 месяцев назад
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();
      }
     
});