Adobe Acrobat Pro DC: советы по использованию пользовательских скриптов
Я пытаюсь создать форму с:
- серия числителей и знаменателей для расчета
- если поле оставлено пустым, оно не включается в расчет
- вычисление должно быть обновлено в реальном времени, и не ждите, пока в каждом поле появится число, прежде чем оно вычислится.
Это единственный расчет в форме, поэтому изменение порядка расчета не используется. В документе 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 ответ
Ваш код немного повторяется. Вы можете использовать массив, содержащий поля идентификаторов:
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)