jquery / JavaScript - задержка до завершения загрузки - PullRequest
0 голосов
/ 28 марта 2011

Мой скрипт jQuery выглядит примерно так (форма отправляет файлы для загрузки):

      $("#addMore").click(function() {
                $("#progForm").submit();
                $("#upTar").css("display","block");
                $("#title").val("");$("#obj").val("");$("#theory").val("");     $("#code").val("");$("#output").val("");$("#conc").val("");
            });

Я хочу отложить выполнение кода, начиная с $ ("# upTar"), до тех пор, пока отправка формы не будет завершена (то есть файлы загружены и PHP-скрипт ответит).

Редактировать

# upTar - это iframe и цель отправки формы. Я хочу, чтобы #upTar отображался только после того, как его содержимое было сгенерировано из скрипта действия формы.

Спасибо!

Код после решения

 $("#addMore").click(function() {
    $("#progForm").submit();
    $('#upTar').load(function() {
        $("#upTar").css("display","block");
        $("#title, #obj, #theory, #code, #output,     #conc").val("");
       });
 });

Ответы [ 3 ]

2 голосов
/ 28 марта 2011

Нет способа заставить JavaScript в браузере «ждать» чего-либо. В этом случае вы можете сделать пару вещей:

  1. Вы можете поместить изменения CSS и т. Д. В обработчик события load для цели <iframe>

    $('#upTar').load(function() {
            $("#upTar").css("display","block");
            $("#title, #obj, #theory, #code, #output, #conc").val("");
    }
    
  2. Вы можете поместить код в ответ на форму POST, которая выполняется из самого <iframe>.

    $(function() {
      (function($) {
            $("#upTar").css("display","block");
            $("#title, #obj, #theory, #code, #output, #conc").val("");
      })(window.parent.$);
    });
    
0 голосов
/ 26 апреля 2011

Если вы загрузите jQuery внутри iframe, вы можете использовать следующую функцию для управления родительскими элементами с помощью этого селектора:

$("#myparentid", top.document); 

По сути, вы можете запустить функцию внутри iFrame, которая ожидает обновления вВ какой момент вы можете запустить любую функцию, которую пожелаете, с помощью селектора top.document.

0 голосов
/ 28 марта 2011

То, что вы сейчас делаете, это отправка HTML-формы и загрузка любой страницы, которую вы указали в атрибуте «action» формы.Нижняя часть функции javascript никогда не будет выполняться, так как браузер будет перенаправлен на новую страницу.Вот что вы хотите, форма, которая отправляет через ajax, а затем очищает форму:

$("#addMore").click(function() {
    var formData = $("#progForm").serialize();
    var url = $("#progForm").attr("action");
    $.get(url, formData, function(){
        $("#upTar").css("display","block");
        $("#title").val("");
        $("#obj").val("");
        $("#theory").val("");
        $("#code").val("");
        $("#output").val("");
        $("#conc").val("");
    });
});

Вы искали что-то подобное?

...