2009-08-08 5 views
1

Ich SimpleModal in einer Anwendung von mir Umsetzung dieses Code verwendet:SimpleModal Ajax-Aufruf

$(".dialog-link").live('click', function(e) { 
e.preventDefault(); 
$.get($(this).attr('href'),function(data) { 
    $.modal(data, {onOpen: open, position: ['10%','30%']}); 
); 
}); 

(FYI: der onOpen Rückruf nur einig Höhe Sets)

Das Dokument wird von dem Ajax-Aufruf zurückgegeben (in Daten enthalten) hat einige jquery Aufrufe zu Datepicker, etc. Aber wenn mein Dialogfeld zeigt die Datepicker wird nicht funktionieren.

Ich weiß, ich kann den Datepicker aus dem OnShow Callback öffnen, aber das Ideal wäre, eine Funktion in Daten enthalten, da jeder Dialog verschiedene jquery Aufrufe haben kann.

Gibt es eine Möglichkeit zum Beispiel

onShow: function(dialog) { dialog.data.my_function(); } 

Dank zu tun, Michael

Antwort

1

Als DOM Inspektion offenbaren kann (Firebug ist immer praktisch, ...), die modalen Dialog lädt das externe Dokument in ein div, stripping out die <html> und <head> Tags. Es scheint auch, in den Bereich der Hauptfenster Objekte und Funktionen zu importieren, die im geladenen Dokument definiert sind.

fordern daher eine Funktion, als ob es im Rahmen eines anderen Fensters oder Rahmens (dialog.data.my_function) wird nicht funktionieren, war.

Für mich funktioniert stattdessen, die externe Funktion direkt an das onShow-Ereignis zu binden.

Hauptdokument:

<script type="text/javascript"> 
     $("a.dialog-link").live('click', function(e) { 
      e.preventDefault(); 
      $.get($(this).attr('href'),function(data) { 
      $.modal(data, {position: ['10%','30%'], onShow: function(dialog){ 
                  external_function() 
      }}); 
     }); 
    </script> 

Externe Dokument (geladen in das modale Feld :)

<html><head><title>bla bla </title> 
    <script type="text/javascript"> 
     function external_function(){$("#external_content").text("UPDATED!")}; 
    </script> 
</head> 
<body> 
<div id="external_content"> .... </div> 
</body> 
</html> 

this helps :)

1

Erweiterung auf @And Antwort. Da in jQuery 1.9:

Live() entfernt worden ist
Verwandte Themen