Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ajax проблема

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
difight
Отправлено: 11 Июня, 2014 - 14:43:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




Делаю динамическую подгрузку меню на ajax
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $('.shop_list li').on('click','a',function() {
  3. var id_group = $(this).attr("group_id");
  4.  
  5. //alert(id_group);
  6.         $('.shop_list').find('.active').removeClass('active');
  7.         $(this).addClass('active');
  8. $.ajax({
  9. type: "POST",
  10. url: "/ajax/",
  11. data: "category=1&id_group="+id_group+"",
  12. success: function(data) {
  13.  var block = $(data).find(".block").html();
  14.  var size_block = $("#catalogue div.block").size();
  15. if (typeof(block) != 'undefined') {
  16.         if (size_block <= 2) {
  17.                
  18.        
  19.                 if (size_block >= 2)
  20.                 {
  21.                         $('#catalogue div').last().after("<div class='block last'>"+block+"</div>");
  22.                 }
  23.                 else
  24.                 {
  25.                         $('.block_content div').after("<div class='block'>"+block+"</div>");   
  26.                 }
  27.         }
  28.         //alert(block);
  29. }
  30. else {
  31.        
  32.        
  33.         if (size_block == 2) {
  34.                 $('#catalogue div.block').last().remove();
  35.         }
  36.         if (size_block == 3) {
  37.                 $('#catalogue div.last').last().remove();
  38.         }
  39. }
  40.  
  41.    //return false;
  42. },
  43. dataType: 'html'
  44. })
  45.  
  46.    return false;
  47.  
  48. });
  49.  

Изначально когда захожу на сайт 1 блок уже загружен, со всеми категорями, далее при клике происходит подгрузка и добавление блоков. Суть в том что если есть подгруппы у группы на какую я кликнул, то рядом добавляется идентичный блок с содержанием подгрупп.
структура блоков такая
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div class="block">
  3.       <ul id="590" class="shop_list">
  4.         <li>
  5.           <a group_id="595" href="/shop/refrigerators/test-group/">
  6.             <span>Тестовая группа</span>
  7.           </a>
  8.         </li>
  9.       </ul>
  10.     </div>
  11.  

Однако у вновь добавленных блоков условие клика не работает(хотя по структуре оно подходит под условие клика...), происходит просто редирект по хрефу, мне этого не надо, надо что бы дальше осуществлялся поиск подкатегорий, если ух нет тогда уже совершать редирект, помогите понять что не так.
 
My status
 Top
IllusionMH
Отправлено: 11 Июня, 2014 - 14:52:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




difight, случайно не работает на ссылках в новых элементах li?
CODE (javascript):
скопировать код в буфер обмена
  1. $('.shop_list li').on('click','a',

этот код ничем не лучше прямого навешивания событий на ссылки. повесится столько обработчиков, сколько и элементо li.
нужно вешать либо на .shop_list (если перезаписывается только его содержимое, но не он сам) либо на элемент, который максимально близко к ним, и никогда сам не перезаписывается.
 
 Top
difight
Отправлено: 11 Июня, 2014 - 14:57:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




IllusionMH пишет:
difight, случайно не работает на ссылках в новых элементах li?
CODE (javascript):
скопировать код в буфер обмена
  1. $('.shop_list li').on('click','a',

этот код ничем не лучше прямого навешивания событий на ссылки. повесится столько обработчиков, сколько и элементо li.
нужно вешать либо на .shop_list (если перезаписывается только его содержимое, но не он сам) либо на элемент, который максимально близко к ним, и никогда сам не перезаписывается.

Именно так и не работает, только почему? Мне и нужно обрабатывается событие по клику на ссылке, сейчас повесил событие по клику на li результат тот же. Может вы не совсем так поняли, .shop_list у меня не перезаписывается, изначально когда я открываю сайт один блок .shop_list у меня уже есть, при клике в нем на любой li a подгружаются категории килкнутой ссылки и рядом создается такой же блок .shop_list с такой же структурой как и первый их становиться уже два, но во 2ром собития по клику на ссылки уже не работают
 
My status
 Top
IllusionMH
Отправлено: 11 Июня, 2014 - 15:28:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




difight, логично. Элемент то создается после того как прошло навешивание событий(события вешаются на все элементы удовлетворяющие селектору, а потмо просто фильтруются по второму параметру функции on), значит нужно вешать событие
IllusionMH пишет:
на элемент, который максимально близко к ним, и никогда сам не перезаписывается.

т.е. div.block или выше по дереву.
 
 Top
difight
Отправлено: 11 Июня, 2014 - 16:46:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




IllusionMH пишет:
difight, логично. Элемент то создается после того как прошло навешивание событий(события вешаются на все элементы удовлетворяющие селектору, а потмо просто фильтруются по второму параметру функции on), значит нужно вешать событие

Вынес обрабочик в функцию и у ссылок на onclick повесил вызов функции, теперь работает, подскажите еще момент, как можно определить в каком из блоков div.block была нажата ссылка. Т.е. нажал я например в первом диве по ссылке, получил позицию блока 1 или 2 например. В зависимости от того какую позицию он занимает....
 
My status
 Top
IllusionMH
Отправлено: 11 Июня, 2014 - 16:54:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




difight, искать родителя источника события подходящего под описаине, а потом проверять позицию через .index() либо другой параметр
 
 Top
difight
Отправлено: 11 Июня, 2014 - 16:59:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 355
Дата рег-ции: Нояб. 2011  


Помог: 3 раз(а)




IllusionMH пишет:
difight, искать родителя источника события подходящего под описаине, а потом проверять позицию через .index() либо другой параметр

Отлично, работает, спасибо за помощь
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB