2009-04-21 8 views
1

Ich habe Probleme, meine modale Fensterfunktion an einige zurückgegebene Daten zu binden. Ich benutze Cody Lindy http://swip.codylindley.com/DOMWindowDemo.html">Jquery.DomWindow Plugin.Bitte beachten Sie, dass alles einwandfrei funktioniert, außer für dieses Problem.jQuery .getJSON-Funktion muss zurückgegebene Daten erneut binden

Das Problem tritt auf, wenn die Daten zurückgegeben werden von meinem jQuery.getJSON Aufruf enthält einen Link, der das modale Fenster öffnen, sollte die Verbindung jedoch durch das DOM nicht erkannt und daher nicht durch eine Funktion gebunden

Meine jQuery-Funktion ist:..

$(".deleteThis").live("click", function(){ 
    var $this = $(this); 

    $.getJSON(this.href, function(data) { 
     if(data.success == '1') { 
     $this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');   
     } 
     else if(data.success == '2') { 
     $this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');   
     }  
     else {alert("Failure (most likely our fault).");} 
    }); 

    return false; 
}); 

Das PHP-Skript, an das jQuery sendet, enthält einige Datenbankskripte (unten nicht gezeigt, da es nicht relevant ist) levant PHP-Code, der die JSON Array zurückgibt, ist dies:

if($del ==1){ 
    $msg= "$name has been deleted. (<a href='media/delete_coll.php?cid=$cid&delete=0' class='deleteThis' >undo</a>)"; 
    print json_encode(array("success" => 1,"msg" => $msg)); 
} 

if($del ==0){ 
    $msg= "$name <a href='media/editCollab.php?coll=$coll_id' class='absoluteIframeDOMWindow'>edit</a> 
    <a href='media/delete_coll.php?cid=$coll_id&delete=1&coll=$coll' class='deleteThis' > delete</a> | 
    Collaborator has restored."; 
    print json_encode(array("success" => 2, "msg" => $msg)); 
} 

Antwort

1

Dies geschieht, weil das Plugin die Event-Handler beim Laden der Seite bindet, und Sie hinzufügen, dann dynamische Inhalte auf der Seite nach der Tat. Die einfachste Lösung wäre, den Code, mit dem Sie das DomWindow-Plugin installieren möchten, in eine Funktion zu verschieben und beim Laden der Seite und beim Hinzufügen eines neuen Links erneut aufzurufen. Wenn es anfängt, die bereits bestehenden Links doppelt zu binden, müßten Sie den dynamischen Links eine andere Klasse geben und das zweite Mal für diese Klasse instatieren.

EDIT:

Es scheint hier einige Missverständnisse zu sein, also werde ich weiter erklären:

Die jQuery live Funktion (die Sie für .deleteThis verwenden) wurde entwickelt, um das Problem zu beheben, die du hast. Sie kennen das wahrscheinlich schon und verwenden es daher. Der obige Absatz war, weil ich glaube, was Sie sagen, ist, dass der DomWindow edit Link, den Sie zurückgeben, das DomWindow nicht öffnet, wie Sie vielleicht erwarten würden. Dies liegt daran, dass DomWindow intern live nicht verwendet, um die Ereignisse zu binden. Wenn Sie also DomWindow beim Laden der Seite initialisieren, werden die Links gebunden, die neuen jedoch nicht. Wenn Sie bereit sind, den Quellcode des Plugins zu bearbeiten, können Sie dies direkt beheben, indem Sie einfach live verwenden, aber es ist einfacher (wenn auch nicht so "sauber"), den Code einfach zu einer Funktion zu verschieben und ihn aufzurufen, wann immer Sie sind Hinzufügen von mehr Inhalt zu der Seite.

+0

Das .live-Ereignis (das superUntitled verwendet) sollte mit jedem aktuellen und zukünftigen Element namens ".deleteThis" umgehen. –

+0

Sein Problem ist nicht mit .deleteThis, sein Problem ist mit der Edit-Link mit class = 'absoluteIframeDOMWindow' - Ich nehme an, er verließ den Teil, wo er das DomWindow-Plugin aufruft, um alle Links mit dieser Klasse machen X, aber das ist wo ist sein Problem. –

+0

Ich habe eine neue Funktion und eine neue Klasse erstellt, und es funktioniert. Ich weiß, dass ich in Zukunft damit in Schwierigkeiten kommen werde. Wenn es mehrere Instanzen der "edit | delete" -Links und möglicherweise mehrere "undo" -Links gibt, werde ich unweigerlich in die "double bind" geraten (der Inhalt in der Das modale Fenster wird zweimal aufgerufen und daher zweimal angezeigt. – superUntitled

Verwandte Themen