每当我调用它的树枝模板时执行javascript

时间:2019-06-12 20:01:23

标签: javascript php twig

我有一个php脚本,该脚本通过for循环调用另一个脚本。然后,调用的脚本会回显带有已附加JavaScript的树枝模板,该模板会导出pdf。问题是javascript仅执行一次。流程如下:

generate-invoice.php-> invoice.php->具有脚本标签的树枝模板-> 该javascript的代码是:

window.onload = function() {
  kendo.pdf.defineFont({
      "Comfortaa": "/doc/fonts/Comfortaa-Regular.ttf",
      "Comfortaa|Bold": "/doc/fonts/Comfortaa-Bold.ttf",
  });

  var inv_num = document.querySelector('#inv_num').dataset.id;
  var company = document.querySelector('#company').dataset.id;

  function ExportPdf(){ 
      kendo.drawing
      .drawDOM("#myCanvas", 
      {
      paperSize: "A4",
      margin: { top: "0.5cm", bottom: "0.5cm", left: "0.5cm", right: "0.5cm" 
},
      scale: 0.8,
      height: 500
      })
      .then(function(group){
      kendo.drawing.pdf.saveAs(group,company + " | Invoice #" + inv_num + 
".pdf")
      });
  }

  ExportPdf();
  console.log('It ran');
}

当我在控制台中查看“ it ran”时,它只被发布了一次,因为分支模板被调用了两次,所以它应该被发布两次。

编辑:只是想让您知道我正在通过include在for循环中调用invoice.php脚本。也许这就是导致此问题的原因?

1 个答案:

答案 0 :(得分:1)

要让您的字符串记录两次或多次调用脚本,请将语句移至ExportPdf() function

window.inload调用它只会运行一次,这是第一次加载窗口。

window.onload = function() {
  kendo.pdf.defineFont({
      "Comfortaa": "/doc/fonts/Comfortaa-Regular.ttf",
      "Comfortaa|Bold": "/doc/fonts/Comfortaa-Bold.ttf",
  });

  var inv_num = document.querySelector('#inv_num').dataset.id;
  var company = document.querySelector('#company').dataset.id;

  function ExportPdf(){ 
      kendo.drawing
      .drawDOM("#myCanvas", 
      {
      paperSize: "A4",
      margin: { top: "0.5cm", bottom: "0.5cm", left: "0.5cm", right: "0.5cm" 
      },
      scale: 0.8,
      height: 500
      })
      .then(function(group){
      kendo.drawing.pdf.saveAs(group,company + " | Invoice #" + inv_num + ".pdf")
      });
      //Moved here
      console.log('It ran');
  }

  ExportPdf();
}

编辑: window.onload只会触发一次,除非刷新浏览器,否则永远不会触发。为了获得理想的结果,建议您将函数放在window.onload之外。在这种情况下,您需要在HTML / JavaScript代码中将调用模板的主要函数包装在.onload中。