2016-10-27 2 views
1

У меня есть сайт, построенный с использованием wordpress в качестве cms, а индекс имеет длинный список заголовков в стиле согласования, и как только вы нажимаете на этот заголовок, контент для этого сообщения загружается через ajax на индексную страницу.Ajax load удваивает контент

У меня возникла проблема, что, когда заголовок снова щелкнут, он снова загружает содержимое сообщения, и если вы нажмете другой заголовок, он не будет закрыт и удалит предыдущий, который был нажат.

Я новичок в работе с ajax и не уверен, как это сделать. Есть ли способ удалить содержимое после того, как заголовок будет нажат второй раз, чтобы закрыть аккордеон или другой заголовок, чтобы щелкнуть его, чтобы развернуть и открыть. Живой сайт находится здесь: http://www.minervasydney.com/

Ниже приведен код для моего ajax и его части в моем индексном файле, в котором перечислены заголовки. Если у кого-то есть идеи, мы будем очень благодарны. Спасибо!

AJAX

 $("a.exhibitionInformation").on("click", function(event) { 

     var exhibitionContainer = $(this).parent(".exhibition"); 
     var url = $(this).attr("href"); 
     var doc = $(this).next(".exhibitionDocuments"); 
     var title = convertToSlug($(this).text().split("\n")[1]); 
     var slug = $(this).attr("data-slug"); 
     $(this).toggleClass("selected"); 

     if($(doc).is(':not(:hidden)')) { 
      $(doc).slideToggle(); 
     } else {    


      $.ajax({ 
       url: url, 
       type: "GET", 
       success: function(data) { 
        var content = $(data).find(".single-document");     
        $(doc).append(content).slideToggle(300);      
        $("html, body").animate({ scrollTop: exhibitionContainer.offset().top - 26 }); 
        window.location.hash = slug; 
       }   
      }); 

     } 

     event.preventDefault(); 
    }); 


    //ajaxstarStop Loading 
    $(document).ajaxStart(function() { 
     $("#loading").fadeIn(100); 
    }); 

    $(document).ajaxStop(function() { 
     $("#loading").fadeOut(); 
    });  


    function convertToSlug(Text) 
    { 
     return Text 
      .toLowerCase() 
      .replace(/ /g,'-') 
      .replace(/[^\w-]+/g,'') 
      ; 
    } 

INDEX

  <section class="exhibition"> 

      <a class="exhibitionInformation" href="<?php the_permalink(); ?>" data-slug="<?php echo $post->post_name; ?>"> 
       <span class="dates"><?php echo types_render_field("dates", array("argument1"=>"value1")); ?></span> 
       <span class="opening"><?php echo types_render_field("opening", array("argument1"=>"value1")); ?></span> 
       <span class="title">&#8220;<?php the_title(); ?>&#8221;</span> 
       <span class="artist"><?php echo types_render_field("artist", array("argument1"=>"value1")); ?></span> 
       <span class="extra"><?php echo types_render_field("extra", array("argument1"=>"value1")); ?></span> 
      </a> 


      <article class="exhibitionDocuments"> 

      </article> 

     </section> 
+0

перед отправкой ответа копию и проверить эту скрипку https://jsfiddle.net/xogzvsjf/6/, если я не ошибаюсь –

+0

@MamdouhFreelancer спасибо за ваше предложение в скрипка. К сожалению, он снова дублировал содержимое, как только заголовок был снова нажат. Он также, казалось, влиял на слайд-переключатель, так как он не оставался открытым, когда он был нажат. Есть ли другой способ, которым вы можете подумать о том, чтобы часть, загруженная ajax, удалялась после того, как заголовок был нажат второй раз? благодаря! – RJM

+0

Вы имели в виду, что хотите прервать запрос ajax, если щелкнул другой или текущий заголовок? проверьте это https://jsfiddle.net/xogzvsjf/10/ –

ответ

0

В вашей просьбе АЯКС:

$.ajax({ 
    url: url, 
    type: "GET", 
    success: function(data) { 
     var content = $(data).find(".single-document");     
     $(doc).append(content).slideToggle(300);      
     $("html, body").animate({ scrollTop: exhibitionContainer.offset().top - 26 }); 
     window.location.hash = slug; 
    }   
}); 

На второй строке под успех, изменить .append к .html.

Линия должна теперь быть:

$(doc).html(content).slideToggle(300); 

Она будет загружать содержимое и удалить предыдущую, если там было.


EDIT

Чтобы закрыть ранее открыл .exhibitionDocuments:

$(document).find(".exhibitionDocuments").hide(); 

разместить его на верхней части вашего успеха обратного вызова.
      (перед var content = $(data).find(".single-document");)

+0

Спасибо! Это сработало отлично! В этом случае есть ли способ закрыть открытый переключатель при нажатии нового заголовка? – RJM

+0

Я отредактировал ... Посмотри, работает ли это. ;) –

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