2016-07-05 9 views
0

Okay, im Grunde, was ich versuche zu erreichen, ist laden Links, die innerhalb der targetDiv innerhalb der div nicht auf der ganzen Seite laden angeklickt werden; Unten ist das Skript, das ich gerade benutze.Laden Sie Seiteninhalte und Links innerhalb von div;

<div id = "targetDiv"></div> 

<script> 
$('document').ready(function() { 
    $('#targetDiv').load('/test.php'); 
}); 
</script> 

Also das Problem, das ich habe, ist, dass, wenn ein Link geklickt wird, die in der targetDiv der ganzen Seite geladen wird geladen wird und der Benutzer wird von der ursprünglichen Seite genommen und auf die neue Seite genommen; und was ich will, ist die neue Seite laden innerhalb der targetDiv.

+0

[update] Ich möchte, dass es als ein iframe in dem Sinne fungiert, dass Links innerhalb des Rahmens auf geladen klicken; aber lade innerhalb einer div, wenn das leichter verständlich ist. – Johnny

+0

Können Sie uns zeigen, wie Ihre Links aussehen? – showdev

+0

@showdev sicher auf der 'test.php' Seite, die in' targetDiv' geladen ist meine Links sehen aus wie 'Home' – Johnny

Antwort

4

Sie benötigen einen Click-Handler haben, die das Standardereignis verhindert und verwendet auch die href load() wieder

$(function(){ 
    $('#targetDiv').on('click', 'a', function(e){ 
     e.preventDefault();// prevent browser from opening url 
     $('#targetDiv').load(this.href);  
    }); 
}); 

Dies ist ein delegierte Zuhörer für zukünftige <a> zu berücksichtigen, die während der Laufzeit nicht existieren

+0

Kann ich nur bestätigen, dass ich das richtig verwende, da ich es nicht bekommen kann, um die Seite zu laden; In dieser Zeile verwende ich '$ ('# targetDiv'). load ('/ text.php');' Allerdings lädt es nichts im div. – Johnny

+1

aber das würde immer die gleiche Seite laden. Du hast gesagt, du wolltest Links in den Inhalt laden, was ich verstanden habe. – charlietfl

+0

Oh, richtig, das ist großartig, ich könnte es auch so machen, es tut mir wirklich leid für eine letzte Frage, aber wie würde ein Link aussehen, wenn ich innerhalb des Targetdivs laden wollte, tut mir wirklich leid. also zum Beispiel, wenn ein Link außerhalb des div geladen wurde innerhalb der div – Johnny

1

Der Hauptgrund, warum dies nicht funktioniert, liegt an CORS. Wenn Sie mein Code-Snippet beim Ausführen eines PHP-Webservers versuchen, funktioniert es nahtlos.

Es scheint, dass ein Ereignis-Listener für das Klickereignis fehlt. Angenommen, Ihr hat id = „link“:

jQuery

$("#link").click("click", function() { 
    // Do the AJAX request 
    $.ajax({ 
    url: "/text.php" 
    }) 
    .done(function(data) { // data fetched from php file 
    // Load data into div 
    $('#targetDiv').html(data); 
    }); 

    /* 
    // this would also work 
    $("#targetDiv").load('text.php'); 
    */ 
}) 

<div id="targetDiv"></div> 
+1

'load()' das OP ist eine Abkürzung Methode für '$ .ajax' – charlietfl

+0

Wenn ich dieses Skript verwende es nicht lädt das Dokument text.php in das TargetDiv? – Johnny

+0

wird nichts in der Konsole produziert. @ErikEngervall – Johnny

2

Die einfache Antwort auf das, was Sie zu tun versuchen, ist, bind Click-Ereignisse Tags innerhalb Ihrer Ziel div zu verankern und laden ausdrücklich den Inhalt das div wieder.

$("#targetDiv a").click(function() { 
    $('#targetDiv').load(this.href); 
}); 

Wie es getrennte Note, scheint es, wie Sie iframe-ähnliches Verhalten erwartet worden sein, die das Element sein können Sie hierfür gehen.

+1

Diese Elemente existieren zur Laufzeit nicht – charlietfl

+2

Ich empfehle auch ['preventDefault'] (https://api.jquery.com/event.preventdefault/) auf das Click-Ereignis, so dass der Link in seinem nicht folgen wird native Art und Weise. – showdev

+0

Okay, ich weiß nicht warum, aber ich benutze das korrekt, weil die Seite nicht in das Div geladen wird, hier; '$ (" #targetDiv a ").click (function() {$ ('# targetDiv'). load ('/ text.php');}); ' – Johnny

Verwandte Themen