jquery / JavaScript - 延迟上传完成

时间:2011-03-28 14:16:37

标签: javascript jquery upload delayed-execution

我的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 个答案:

答案 0 :(得分:2)

没有办法让浏览器中的JavaScript“等待”任何事情。在这种情况下,您可以做几件事:

  1. 您可以将CSS更改等放在目标<iframe>的“加载”事件处理程序中

    $('#upTar').load(function() {
            $("#upTar").css("display","block");
            $("#title, #obj, #theory, #code, #output, #conc").val("");
    }
    
  2. 您可以将代码放在对<iframe>本身执行的表单POST的响应中。

    $(function() {
      (function($) {
            $("#upTar").css("display","block");
            $("#title, #obj, #theory, #code, #output, #conc").val("");
      })(window.parent.$);
    });
    

答案 1 :(得分:0)

您现在正在做的是提交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("");
    });
});

你在寻找类似的东西吗?

答案 2 :(得分:0)

如果在iframe中加载jQuery,可以使用以下函数来控制使用此选择器的父元素:

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

本质上,您可以在iFrame中运行一个等待刷新的函数,此时您可以使用top.document选择器运行任何您想要的函数。