Frage

Ich versuche einige Elemente zu manipulieren, nachdem ich sie mit .load () geladen habe. Ich habe alles richtig geladen, aber ich kann nicht anscheinend auf Elemente in einem der geladenen Elemente abzielen. Dies scheint etwas zu sein, das einfach wäre, aber ich kann einfach meinen Finger darauf legen.

Ich benutze einen Rückruf nach dem Laden der Elemente, aber das DOM scheint sich ihrer Existenz nicht bewusst zu sein?

function load_page(){
    $('#page_name').load("/page-name/ .page", null, load_complete());
}

function load_complete() {
    $('#page_name .book_img').addClass('hello');
}

Ok, hier bin ich jetzt. Ich habe hinzugefügt...

$('#wrapper').ajaxComplete(function() {
    $('#page_name .book_img').addClass('hello');
}

was funktioniert. Es muss einen Unterschied zwischen dem .autocomplete und dem Rückruf geben, der mit der Funktion .load () verpackt ist. Ich mag das nicht wirklich, weil es jedes Mal aufgerufen wird, wenn ein Ajax -Ereignis geladen wird, aber es bringt mich ein bisschen weiter die Straße hinunter.

Hat jemand etwas Besseres?

BEARBEITEN

Ich habe es auch versucht ...

$('#wrapper').ajaxComplete(function() {
    $('#page_name .book_img').addClass('hello');
}

Was irgendwie schön ist, da es wartet, bis alle Ajax -Anrufe vor dem Aufrufen der Funktion ausgeführt werden. Vielleicht ist dies der Weg, es zu tun, aber es scheint immer noch, als würde die Funktion .load () sich darum kümmern?

Keine korrekte Lösung

Andere Tipps

Sieht so aus, als würde Sie Ihre Rückruffunktion ausführen, anstatt sie an die Lastmethode weiterzugeben:

function load_page(){
    // $('#page_name').load("/page-name/ .page", null, load_complete());
    $('#page_name').load("/page-name/ .page", null, load_complete);
}

function load_complete() {
    $('#page_name .book_img').addClass('hello');
}

Was also an die Lastmethode übergeben wurde

Manchmal braucht das HTML etwas Zeit, um zu rendern. Fügen Sie eine Verzögerung hinzu, bevor Sie auf den neuen Inhalt zugreifen:

$('#page_name').load("/page-name/ .page", null, window.setTimeout(function(){load_complete()},50);

Sie müssen das JavaScript einbeziehen, das Ihre geladenen Objekte in das geladene Element manipulieren soll. Dies liegt daran, dass es bereits alle Ihr JavaScript durchlaufen hat.

bearbeiten

Versuchen Sie dies, stellen Sie die Asynchronizität auf False ein, damit Sie nach dem Laden einen Rückruf hinzufügen können.

$.ajax ({
  async: false,
  type: "GET",
  dataType: "html",
  url: "/page-name/ .page",
  complete: function(){load_complete()};
});

aktualisieren

Hey, es gibt auch diese Kurzschrift, die ich gelegentlich benutze. Es überrascht mich, dass diese nicht in Ihrem Skript funktionieren.

$.get($(this).attr('href'), function(response) { $('#content').html(response); });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top