2016-10-27 12 views
1

Ich habe eine Website mit WordPress als cms gebaut und der Index hat eine lange Akkordeon Stil Liste von Titel und sobald Sie auf diese Überschrift klicken, wird der Inhalt für diesen Beitrag über Ajax in die Indexseite geladen.Ajax Load verdoppelt Inhalt

Ich habe das Problem, dass wenn die Überschrift erneut angeklickt wird, lädt sie den Beitrag Inhalt wieder und wenn Sie auf eine andere Überschrift klicken, wird nicht geschlossen und entfernen Sie die vorherige, die angeklickt wurde.

Ich bin neu in der Arbeit mit Ajax und unsicher, wie man das beheben kann. Gibt es eine Möglichkeit, den Inhalt zu entfernen, nachdem die Überschrift ein zweites Mal angeklickt wurde, um das Akkordeon zu schließen, oder auf eine andere Überschrift geklickt wird, um sie zu erweitern und zu öffnen. Live-Site ist hier: http://www.minervasydney.com/

Unten ist der Code für meine Ajax und der Teil in meiner Indexdatei, die die Überschriften auflistet. Wenn jemand Ideen hat, würde es sehr geschätzt werden. Vielen Dank!

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

vor Antwort Kopie veröffentlichen und testen Sie diese Geige https://jsfiddle.net/xogzvsjf/6/ wenn ich –

+0

@MamdouhFreelancer Dank nicht falsch bin für Ihren Vorschlag in der Geige. Leider verdoppelte sich der Inhalt noch, nachdem die Überschrift erneut angeklickt wurde. Es schien auch den Schieberegler zu beeinflussen, da er beim Klicken nicht geöffnet bleiben würde. Gibt es eine andere Möglichkeit, den Teil, der mit Ajax geladen wurde, zu entfernen, nachdem die Überschrift ein zweites Mal angeklickt wurde? Vielen Dank! – RJM

+0

Meinten Sie, Sie möchten die Ajax-Anfrage abbrechen, wenn eine andere oder aktuelle Überschrift angeklickt wurde? Testen Sie diese https://jsfiddle.net/xogzvsjf/10/ –

Antwort

0

Innerhalb Ihrer Ajax-Anfrage:

$.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; 
    }   
}); 

In der zweiten Zeile unter Erfolg, .append zu .html ändern.

sollte die Linie jetzt sein:

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

Es den Inhalt geladen wird und früheren entfernen, wenn war da.


EDIT

schließen ein zuvor .exhibitionDocuments geöffnet:

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

Platz es oben auf Ihren Erfolg Rückruf.
      (rechts vor var content = $(data).find(".single-document");)

+0

Vielen Dank! Das hat perfekt funktioniert! Gibt es eine Möglichkeit, einen offenen Schalter zu schließen, wenn auf eine neue Überschrift geklickt wird? – RJM

+0

Ich bearbeitet ... Sehen Sie, ob es funktioniert. ;) –