Adobe Acrobat Pro DC: советы по использованию пользовательских скриптов

Я пытаюсь создать форму с:

  1. серия числителей и знаменателей для расчета
  2. если поле оставлено пустым, оно не включается в расчет
  3. вычисление должно быть обновлено в реальном времени, и не ждите, пока в каждом поле появится число, прежде чем оно вычислится.

Это единственный расчет в форме, поэтому изменение порядка расчета не используется. В документе Javascript у меня есть

this.calculateNow();

и в пользовательском сценарии расчета для поля у меня есть

(function () { 

var v1 = +getField("Text1").value;
var v2 = +getField("Text2").value;
var v3 = +getField("Text3").value;
var v4 = +getField("Text4").value;
var v5 = +getField("Text5").value;
var v6 = +getField("Text6").value;
var v7 = +getField("Text7").value;
var v8 = +getField("Text8").value;
var v9 = +getField("Text9").value;
var v10 = +getField("Text10").value;

event.value = (v2 * v4 * v6 * v8 * v10) !== 0 ? ((v1 * v3 * v5 * v7 * v9) / (v2 * v4 * v6 * v8 * v10)) : "";
})();

Проблемы, которые у меня возникают:

  1. что расчет не рассчитывается в режиме реального времени
  2. все поля все еще должны быть введены для расчета.
  3. если введен ноль, расчет не будет выполняться.

1 ответ

Ваш код немного повторяется. Вы можете использовать массив, содержащий поля идентификаторов:

const fields = Array.from({length:10}, (_,i)=>"Text"+(i+1));

Затем мы можем сопоставить поля с их значениями и использовать оператор или для заполнения неустановленных полей:

const values = fields.map( f => +getField(f).value || 1 );

Этот массив затем может быть уменьшен до определенного значения, например, с помощью умножения:

const result = values.reduce((a,b) => a*b)
Другие вопросы по тегам