我有一个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脚本。也许这就是导致此问题的原因?
答案 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
中。