выполнять JavaScript каждый раз, когда я вызываю его шаблон ветки - PullRequest
0 голосов
/ 12 июня 2019

У меня есть скрипт 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');
}

И когда яПосмотрите в консоли, он запускался только один раз, где он должен быть опубликован дважды, потому что шаблон ветки был вызван 2 раза.

РЕДАКТИРОВАТЬ: Просто хотел сообщить, что я вызываю счетСкрипт

1 Ответ

1 голос
/ 12 июня 2019

Чтобы ваша строка была записана дважды или столько раз, сколько был вызван скрипт, переместите оператор в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...