Дополнение JQuery SimpleModal продолжает открывать динамически загруженный iframe - PullRequest
2 голосов
/ 25 июня 2010

Я нашел похожий вопрос, но принятый ответ не тот, который я хочу: При использовании iframe в jquery.simplemodal перезагрузка iframe при закрытии всплывающего окна

Я хочу сначала динамически загрузить контент в iframe, затем, когда он завершит загрузку, использовать SimpleModal для его отображения. Моя проблема в том, что он, похоже, продолжает всплывать.

Я связал следующее с нажатием кнопки, и оно открывается нормально (хотя я не уверен, что содержимое iframe действительно загрузилось при его открытии), но после приятной анимации закрытия я вижу, что ajax запрос повторяется, и он снова открывается.

$.get('a/zong/299/' + number +"/", function(data) {
  $(document.body).append('<iframe id="zong" src='+data+
    ' width="490" height="350" style="display:none;border:none;"></iframe>');
  $('iframe#zong').load(function() 
  {
    $('#zong').modal({
      overlayCss: {backgroundColor:"#C4EFFF"},
      containerCss:{
        ...
      },
      overlayClose:true,
      onOpen: function(dialog){
        dialog.overlay.fadeIn('slow', function(){
          dialog.data.hide();
          dialog.container.fadeIn('slow', function(){
            dialog.data.slideDown('slow');
          });
        })
      },
      onClose: function(dialog){
        dialog.data.fadeOut('slow', function(){
          dialog.container.hide('slow', function(){
            dialog.overlay.slideUp('slow', function(){
              $.modal.close();
            })
          })
        })
      },
    });
  });
});

как видите, жизнь довольно сложна;) источник iframe должен быть сгенерирован на сервере, затем загружен iframe, который разрушается, когда диалог теряет фокус.

PS: Было бы неплохо, если бы stackoverflow мог делать авто-отступ для кода, вставленного при копировании, который длился вечно! ;)

Я пытался добавить $('#zong').attr('src', ''); внутри функции onClose, но все равно не повезло, модальный диалог возвращается из нежити. ;)

Спасибо за помощь!

1 Ответ

1 голос
/ 25 июня 2010
$.get('a/zong/299/' + number +"/", function(data) { 
    $('<iframe id="zong" src='+data+ 
    ' width="490" height="350" style="display:none;border:none;"></iframe>').modal({ 
      overlayCss: {backgroundColor:"#C4EFFF"}, 
      containerCss:{ 
        ... 
      }, 
      overlayClose:true, 
      onOpen: function(dialog){ 
        dialog.overlay.fadeIn('slow', function(){ 
          dialog.data.hide(); 
          dialog.container.fadeIn('slow', function(){ 
            dialog.data.slideDown('slow'); 
          }); 
        }) 
      }, 
      onClose: function(dialog){ 
        dialog.data.fadeOut('slow', function(){ 
          dialog.container.hide('slow', function(){ 
            dialog.overlay.slideUp('slow', function(){ 
              $.modal.close(); 
            }) 
          }) 
        }) 
      }, 
    }); 
}); 
...