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
Форумы портала PHP.SU :: Версия для печати :: Ajax проблема
Форумы портала PHP.SU » » Вопросы новичков » Ajax проблема

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

1. difight - 11 Июня, 2014 - 14:43:51 - перейти к сообщению
Делаю динамическую подгрузку меню на 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.  

Однако у вновь добавленных блоков условие клика не работает(хотя по структуре оно подходит под условие клика...), происходит просто редирект по хрефу, мне этого не надо, надо что бы дальше осуществлялся поиск подкатегорий, если ух нет тогда уже совершать редирект, помогите понять что не так.
2. IllusionMH - 11 Июня, 2014 - 14:52:20 - перейти к сообщению
difight, случайно не работает на ссылках в новых элементах li?
CODE (javascript):
скопировать код в буфер обмена
  1. $('.shop_list li').on('click','a',

этот код ничем не лучше прямого навешивания событий на ссылки. повесится столько обработчиков, сколько и элементо li.
нужно вешать либо на .shop_list (если перезаписывается только его содержимое, но не он сам) либо на элемент, который максимально близко к ним, и никогда сам не перезаписывается.
3. difight - 11 Июня, 2014 - 14:57:35 - перейти к сообщению
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ром собития по клику на ссылки уже не работают
4. IllusionMH - 11 Июня, 2014 - 15:28:31 - перейти к сообщению
difight, логично. Элемент то создается после того как прошло навешивание событий(события вешаются на все элементы удовлетворяющие селектору, а потмо просто фильтруются по второму параметру функции on), значит нужно вешать событие
IllusionMH пишет:
на элемент, который максимально близко к ним, и никогда сам не перезаписывается.

т.е. div.block или выше по дереву.
5. difight - 11 Июня, 2014 - 16:46:30 - перейти к сообщению
IllusionMH пишет:
difight, логично. Элемент то создается после того как прошло навешивание событий(события вешаются на все элементы удовлетворяющие селектору, а потмо просто фильтруются по второму параметру функции on), значит нужно вешать событие

Вынес обрабочик в функцию и у ссылок на onclick повесил вызов функции, теперь работает, подскажите еще момент, как можно определить в каком из блоков div.block была нажата ссылка. Т.е. нажал я например в первом диве по ссылке, получил позицию блока 1 или 2 например. В зависимости от того какую позицию он занимает....
6. IllusionMH - 11 Июня, 2014 - 16:54:46 - перейти к сообщению
difight, искать родителя источника события подходящего под описаине, а потом проверять позицию через .index() либо другой параметр
7. difight - 11 Июня, 2014 - 16:59:51 - перейти к сообщению
IllusionMH пишет:
difight, искать родителя источника события подходящего под описаине, а потом проверять позицию через .index() либо другой параметр

Отлично, работает, спасибо за помощь

 

Powered by ExBB FM 1.0 RC1