2013-04-23 65 views
2

我有一个PDF生成器,它将完整的HTML文档字符串作为参数,然后打开在新选项卡/窗口中创建的PDF或下载文件。我被要求连接一个表单,这个表单可以创建一个以分号分隔的名称并从中生成多个PDF的证书。这是它的代码:在循环中提交表单

$("#certgensubmit").click(function (event) { 
    // Get the names to generate certificates for. 
    var names = $("#presented-to").html().split(';'); 
    $.each(names, function(index, value) { 
     if(value.length > 0) { 
      var presentedBy = $("#presented-by").html(); 
      var awardName = $("#award-name").html(); 
      var presentedDate = $("#presented-date").html(); 
      var signerName = $("#signer-name").html(); 

      var html = getCertificateHTML(presentedBy, value, awardName, presentedDate, signerName); 
      //console.log(html); 
      $("#HtmlContent").val(html); 
      $("#pdfform").submit(); 
     } 
    }); 
}); 

这有效,除了它只创建第一个证书PDF。不过,它每次都在处理代码。如果我取消注释“console.log(html)”这一行,我会在Chrome的控制台中看到正确的输出。我可以通过在循环中用JavaScript创建一个新文档并运行表单提交。唯一的问题是,它只在发送给PDF生成器的字段中放置文本,但在生成器需要的字段中发送HTML时完全失败。因此,看起来这个问题与在创建PDF期间打开新标签有关。我需要这样做,所以用户不会从接受PDF输入的UI中被带走。

不要太在乎PDF生成方面 - 我只需要知道如何在jQuery每次循环中多次触发表单提交并使用不同的值。剩下的只是上下文。

+0

您是否想过创建一个包含多个证书的PDF,每页一个证书? – slashingweapon 2013-04-23 18:40:34

+0

尝试添加一个延迟,看看发生了什么...睡眠()或什么的。 – 2013-04-23 19:00:54

回答

0

也许你不能提交表单多次。

因此,将您的提交功能更改为帖子,并删除您的表单标签。

.... 

$("#HtmlContent").val(html); 

$.post("pdf_creator.php", 
{ 
    input_name:$("#HtmlContent").val() 
}, 
function(data,status){ 
    //alert("Data: " + data + "\nStatus: " + status); 
}); 

.... 


<!--<form action='pdf_creator.php' id='pdfform'> //form tags out --> 
    <input type='text?' name='input_name' id='HtmlContent' value=''> 
<!--</form>--> 

希望这个工程,并帮助你。