You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写从嵌套JS对象提取值并填充PDF表单的脚本

问题描述

我有一个嵌套JS对象,格式如下:

var oNames = {
    Adobe:{LastUpdate:'03/09/2022',Website:'adobe.com',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'',SecondaryCC:'',PrimaryBank:'',SecondaryBank:'',SQ1:'First girlfriend',SA1:'Denise',SQ2:'Grade school attended',SA2:'OLPH',Notes1:'',Notes2:''},
    Amazon:{LastUpdate:'10/06/2020',Website:'amazon.com',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'Discover',SecondaryCC:'Capital One',PrimaryBank:'',SecondaryBank:'',SQ1:'',SA1:'',SQ2:'',SA2:'',Notes1:'',Notes2:''},
    AmericanGiant:{LastUpdate:'01/25/2022',Website:'american-giant.com',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'',SecondaryCC:'',PrimaryBank:'',SecondaryBank:'',SQ1:'',SA1:'',SQ2:'',SA2:'',Notes1:'Best Hoodies Made in the USA',Notes2:''},
    Asus:{LastUpdate:'11/05/2022',Website:'https://www.asus.com/us/',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'',SecondaryCC:'',PrimaryBank:'',SecondaryBank:'',SQ1:'',SA1:'',SQ2:'',SA2:'',Notes1:'Goto for MB & Laptop Computers',Notes2:''},
    // ... 其他更多条目
}

需要写一段脚本,通过PDF表单下拉框选中的cName(比如Adobe、Amazon等),匹配对象中的对应条目,把属性值填充到PDF的15个表单字段中(字段名格式为inf.0到inf.14)。

我尝试写了一段代码,但无法正常工作:

for(j=0;j<15;j++){
  f=getField("inf."+j);
  cName = oVendors[event.value][j];
}

解决方案

对象是键值对结构,不能像数组那样用数字索引直接访问,需要先建立属性名和表单字段的对应关系,以下是完整可行的脚本:

完整填充脚本

将这段代码放到PDF表单下拉框的On Change事件中:

// 确保oNames对象已定义(如果已经在其他地方定义,可省略这部分)
var oNames = {
    Adobe:{LastUpdate:'03/09/2022',Website:'adobe.com',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'',SecondaryCC:'',PrimaryBank:'',SecondaryBank:'',SQ1:'First girlfriend',SA1:'Denise',SQ2:'Grade school attended',SA2:'OLPH',Notes1:'',Notes2:''},
    Amazon:{LastUpdate:'10/06/2020',Website:'amazon.com',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'Discover',SecondaryCC:'Capital One',PrimaryBank:'',SecondaryBank:'',SQ1:'',SA1:'',SQ2:'',SA2:'',Notes1:'',Notes2:''},
    AmericanGiant:{LastUpdate:'01/25/2022',Website:'american-giant.com',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'',SecondaryCC:'',PrimaryBank:'',SecondaryBank:'',SQ1:'',SA1:'',SQ2:'',SA2:'',Notes1:'Best Hoodies Made in the USA',Notes2:''},
    Asus:{LastUpdate:'11/05/2022',Website:'https://www.asus.com/us/',UserID:'jdoe@gmail.com',PWD:'1234567',PrimaryCC:'',SecondaryCC:'',PrimaryBank:'',SecondaryBank:'',SQ1:'',SA1:'',SQ2:'',SA2:'',Notes1:'Goto for MB & Laptop Computers',Notes2:''},
    // ... 其他条目
};

// 按顺序定义对象属性名与表单字段inf.0到inf.14的对应关系
const fieldMapping = [
    'LastUpdate', 'Website', 'UserID', 'PWD', 
    'PrimaryCC', 'SecondaryCC', 'PrimaryBank', 'SecondaryBank', 
    'SQ1', 'SA1', 'SQ2', 'SA2', 'Notes1', 'Notes2'
    // 若有第15个字段,补充对应的属性名即可
];

// 获取下拉框选中的商家数据
const selectedData = oNames[event.value];

if (selectedData) {
    // 循环填充每个表单字段
    for (let j = 0; j < fieldMapping.length; j++) {
        const targetField = getField("inf." + j);
        if (targetField) {
            // 从选中的商家对象中取出对应属性值,为空时填空字符串
            targetField.value = selectedData[fieldMapping[j]] || '';
        }
    }
} else {
    // 若选中的商家不存在,清空所有表单字段
    for (let j = 0; j < fieldMapping.length; j++) {
        const targetField = getField("inf." + j);
        if (targetField) {
            targetField.value = '';
        }
    }
}

关键说明

  • event.value就是下拉框选中的商家名称,直接通过oNames[event.value]即可获取对应的子对象数据。
  • fieldMapping数组用来关联表单字段的索引和对象的属性名,解决对象无法用数字索引访问的问题。
  • 增加了判断逻辑:如果选中的商家不存在,会自动清空所有表单字段,避免残留旧数据。
  • selectedData[fieldMapping[j]]用于获取对应属性值,|| ''确保属性值为空时不会填充undefined。

内容的提问来源于stack exchange,提问作者user14825633

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:20:19