2010-12-20 16 views
1

Ich lade eine Kundendatenseite mit jQuery. Es gibt eine Liste von Kunden mit einem Link daneben:jQuery UI-Dialogformular, keine korrekte Variable senden

<a href="#" onclick="load_customer(<?php echo $c->id; ?>);return false;">View</a> 

, die diese Funktion auslöst:

function load_customer(id) { 
    $("#dashboard").load('get_info/' + id); 
} 

, die perfekt funktioniert. Auf der Seite, die ich lade, habe ich ein modales Dialogformular für jQuery UI zum Hinzufügen neuer Informationen.

<div id="addinfo"> 
    <form><input type="hidden" name="customer_id" value="<?php echo $c->id; ?>" /></form> 
</div> 

Mein javascript:

$("#addinfobutton").click(function(){ 
      $("#addinfo").dialog("open"); 
      return false; 
    }); 
    $("#addinfo").dialog({ 
      autoOpen:false, 
      width:400, 
      height:550, 
      modal: true 
    }); 

Wenn Sie einen Kunden zum ersten Mal wählen, füllt sie das versteckte Feld richtig, aber dann bleibt es das gleiche auch nach anderen Kunden auswählen.

Ich dachte, dass durch das Laden einer neuen Kundenseite das Formular auch zurückgesetzt würde ... aber anscheinend wird es irgendwo gespeichert/zwischengespeichert. Wenn ich die ID irgendwo anders auf der Seite anzeige, wird sie korrekt angezeigt ... nur nicht im "addinfo" div.

Jede Hilfe/Vorschläge wären willkommen! Vielen Dank!

+0

Ich nehme an, Sie laden eine neue Kundenseite durch Ajax? und das ersetzt das #addinfo div auch? – ifaour

Antwort

1

Dialog des JQuery nicht nachladen der Inhalt für Sie, wenn Sie sie öffnen. Ich tendiere dazu, einen AJAX-Aufruf zu haben, der den Inhalt des divs ersetzt, auf dem sich das Dialogfeld befindet (oder einige Werte darin ändern), wenn das Dialogfeld geöffnet wird.

Wenn Sie ein verstecktes Feld möchten, würde ich es nicht in den Dialog einfügen, Sie sollten in der Lage sein, den Wert von außerhalb des Dialogs abzurufen.

0

Nach einigen Recherchen scheint es, dass der Dialog clientseitig zwischengespeichert wird, nachdem er aufgerufen wurde. Um das zu umgehen, habe ich einfach die customerId am Ende des ID-Namens des Popup-DIVs hinzugefügt ... so hat jede Kundenseite eine eindeutige Dialog-ID.

Wenn jedoch jedes dieser Dialoge zwischengespeichert wird, gibt es dann keinen Leistungsverlust, wenn Sie einige öffnen? Wie können Sie sie löschen, ohne eine vollständige Seitenaktualisierung durchführen zu müssen?

0

Ich denke, wenn die #addinfo div aktualisiert wird, sollte den neuen Inhalt erfassen ... wie auch immer dies den Dialog zerstören würde es nach dem Schließen eine neue Instanz, um sicherzustellen, wird erstellt:

$("#addinfobutton").click(function(){ 
    openDialog('#addinfo'); 
    return false; 
}); 
function openDialog(elm) { 
    $(elm).dialog({ 
     autoOpen:true, 
     width:400, 
     height:550, 
     modal: true, 
     close: function() { 
      $(this).dialog('destroy'); 
     } 
    }); 
} 
+0

Danke! Bei diesem Code wird der div auf der Seite angezeigt, da der Dialog nicht explizit mit dem Element angegeben wird. Auch wenn ich versuchte, den Dialog vorher zu zerstören ... würde es bei anderen Klicks nicht funktionieren. – TerryMatula

+0

Ich habe dich nicht hierher gebracht? "da es nicht explizit mit element angibt, ist der dialog, es zeigt tatsächlich das div auf der seite an" bedeutet das, dass der obige code für dich funktioniert hat oder nicht? :-) wenn es klappt, bitte die antwort annehmen und wenn nicht mehr ausarbeiten um dir weiterhelfen zu können .. – ifaour

+0

Sorry, nein es hat nicht funktioniert. Das div, das das Formular für den Dialog enthält, wird auf der Seite angezeigt, wenn ich es verwende. Ich möchte nur, dass es angezeigt wird, wenn ich auf den Knopf klicke. – TerryMatula

Verwandte Themen