2013-06-06 5 views
1

Я пытаюсь изменить размер iframe после загрузки содержимого. Страница (загружаемая в iframe) имеет некоторые элементы управления, которые заставляют ее загружать дополнительную информацию в нижнюю часть страницы, и это делается с помощью метода $ .ajax() JQuery.Изменение размера кадра при завершении Ajax

Я попытался использовать $(document).ajaxComplete(), но это заканчивается тем, что регистрируется перед событием успеха $ .ajax(). То, что я хочу сделать, это зарегистрировать событие после события успеха.

Например:

<script type='text/javascript'> 
$(document).ready(function(){ 
    resizeIframe(); 
    $(document).ajaxComplete("resizeIframe"); 
    $(document).load("resizeIframe"); 

}); 

function resizeIframe() 
{ 
    $(window).parent().height($("body").height()); 
    $(window).scrollTop(0); 
} 
</script> 

Это работает должным образом на статически нагруженных страниц. Однако, если у меня есть что-то вроде этого:

<script type='text/javascript'> 
    $("someObject").on('click', function(){ 
     $.ajax({ 
      type: 'post', 
      url: 'someurl.php', 
      success: function(data) 
      { 
       $("body").append(data); 
      } 
     }); 
    }); 
</script> 

того resizeIframe будет вызываться перед функцией .ajax успеха (это означает, что дом не содержит эти аддитивные элементы, и, таким образом, эта страница является неправильной высотой I. хотел бы избежать добавления resizeIframe к каждому АЯКС вызову я делаю, есть событие, я могу использовать, чтобы решить эту проблему

Update

Я попытался это:

$(document).ready(function(){ 
    resizeIframe(); 
    $(document).load(function(){ resizeIframe();}); 
    $(document).ajaxComplete(function(){ 
      setTimeout(resizeIframe, 0); 
    }); 
}); 

и, похоже, работает в Firefox 21. Однако он не работает в IE10 (и я должен быть обратно совместим с IE8).

ответ

2

Локальные события всегда будут выполняться перед глобальным событием (Local Success -> Global Success -> Local complete -> Global Complete). Вы можете установить глобальный success событие:

$(document).ajaxSuccess("resizeIframe"); 

API Ref: http://api.jquery.com/ajaxSuccess/

А затем указать локальный complete событие:

url: 'someurl.php', 
complete: function(data) 
{ 
    $("body").append(data); 
} 

Обратите внимание, что полная функция работает всякий раз, когда заканчивается вызов AJAX.

+0

Не работает ли первая функция успеха, которая определяется первым, что означает, что метод resizeIframe будет работать до элемента $ .ajax Success? – Mike

+0

Я только что протестировал, и метод $ (document) .ajaxSuccess() запускается перед элементом успеха в методе $ .ajax – Mike

+0

Ahh yep, просто попробовал. Другая идея, создать свой собственный глобальный обработчик и связать его в локальном событии успеха? – tymeJV

Смежные вопросы