2009-08-08 4 views
1

Я реализация SimpleModal в приложении шахты, используя этот код:SimpleModal Ajax вызов

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

(FYI: обратный вызов OnOpen просто задает некоторую высоту)

документ, возвращенный вызов Ajax (содержащихся в данных) имеет некоторые jquery-вызовы datepicker и т. д. Но когда в моем диалоговом окне отображается , функция datepicker не будет работать.

Я знаю, что я могу открыть datepicker из обратного вызова onShow, но идеальным было бы вызвать функцию, содержащуюся в данных, потому что каждый диалог может иметь разные вызовы jquery.

Есть ли способ, чтобы сделать, например

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

Спасибо, Майкл

ответ

1

Как инспекции DOM может выявить (поджигатель всегда под рукой ...), модальные диалоговые загружает внешний документ в div, удаляя теги <html> и <head>. Он также, кажется, импортирует в объем объектов и функций главного окна, определенных в загруженном документе.

Поэтому вызов функции, как если бы он находился в области другого окна или кадра (dialog.data.my_function), не будет работать.

Для меня вместо этого нужно связать внешнюю функцию с событием onShow.

Основной документ:

<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> 

Внешний документ (загружается в поле модального :)

<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> 

Надежда это помогает :)

1

Расширяя @And ответ. Поскольку live() был удален в jQuery 1.9:

$(document).on("click","a.dialog-link",function(e) { 
    e.preventDefault(); 
    $.get($(this).attr("href"),function(data) { 
     $.modal(data, {position: ["10%','30%"], onShow: function(dialog){ 
      external_function() 
     }}); 
    }); 
});