2016-11-22 1 views
0

навигации (стилизованного с Bootstrap 4) просто Ли элементы и уль контейнер ждет AJAX являетсяСоздание навигации с JQuery и AJAX

<ul class="nav nav-pills lead" id="navitems"></ul> 

Создание первоначального списка нав с двумя статическими (не JSON) элементы с JQuery .html:

$("#navitems").html(' 
<li class="nav-item"><a class="nav-link pcl" href="#" id="load_page1">Nav Link 1</a></li> 
<li class="nav-item"><a class="nav-link pcl" href="#" id="load_page2">Nav Link 2</a></li> 
'); 

Добавление дополнительных элементов с JSON/AJAX

$.getJSON(cfcJSON+'&asite='+asite+'&apost='+apost+'&asort='+asort,  
    function(data) { 
    $.each(data.DATA.NAVITEMS, function(i,navitems){ 
     $('#navitems').append(navitems); 
     return false; // all li items in one string 
    }); 
}); 

Codepenhttp://codepen.io/xsmobi/pen/MbpxbE (важно: не используется HTTPS)

Чтобы быть уверенным, что это не связано с Codepen, я принимала страницу здесь тоже https://www.bitballoon.com/sites/testing-ajax-navigation

В оба случая

  • Построение навигации с JQuery работает
  • только те два тестовых ссылки, созданные с помощью() .html() способны стрелять
  • , созданные с помощью AJAX не
  • Проверка элементов инструментов разработчика: ссылки выглядят одинаково (см скриншот в коде)

Это on.click функция, она работает для не-getJSON ссылки

pdx = 0; 
$('.pcl').click(function() { 
console.log("clicked in doc ready slogan"); 
pdxx = pdx; 
pdx = this.id; 
$(".pcl").removeClass('active'); 
$("#"+pdx).addClass('active'); 
pdx = pdx.replace("load_", ""); 
console.log("Nav li clicked with anchor text ...: " + pdx + "!") 
}); 

Пробовал Need assistance with jquery and ajax и завернули on.Click в документе готовности (вложено в основном документе готов), но это не помогает

ответ

0

события щелчка мыши вы написали для .pcl элемента не прикрепление с динамическими элементами, то есть элементы через ajax или после DOM load, так как click event будет выполнен с прикреплением событий до того, как ваши элементы будут добавлены в DOM. Итак, что вам нужно здесь event delegation. Вы можете попробовать прикрепление событие с document, ориентации конкретного класса $(document).on('click','.pcl',function() { вместо $('.pcl').click(function(){

Таким образом, ваш обновленный код будет выглядеть:

$(document).on('click','.pcl',function() { 
    console.log("clicked in doc ready slogan"); 
    pdxx = pdx; 
    pdx = this.id; 
    $('.pcl').removeClass('active'); 
    $("#"+pdx).addClass('active'); 
    pdx = pdx.replace("load_", ""); 
    console.log("Nav li clicked with anchor text ...: " + pdx + "!") 
}); 

и вот Updated pen

+1

Большое спасибо, Гурупрасед , за вашу быструю и полную помощь, тем более, не обвиняя меня в том, что я не понимаю. Как только проект будет запущен, я собираюсь добавить вас в список ангелов-кодировщиков. –

+0

В любое время .. Счастливое кодирование .. :) Между тем вы можете ** пометить правую метку ** слева от ответа, что означает, что вы принимаете ответ .. :) –

+1

Конечно, id _did_ отметьте его, но SO ответил, что мои тики пока не опубликованы из-за моего низкого уровня. Howerer это считается, так что у вас есть оценка. Добавлена ​​ссылка на ваш профиль SO, он находится в комментарии к соответствующему [Codepen] (http://codepen.io/xsmobi/pen/MbpxbE) –

Смежные вопросы