0

我正在尝试迭代一些 Object 键,然后用这些值填充一些 DropDowns。在 PC 上,我尝试过的每个解决方案都可以正常工作 - 不幸的是,在移动设备上却不是。

所以这就是我尝试过的:

  • Polyfilling Object.keys
  • 在stackoverflow('旧版本')上从某人那里尝试过这种方法:
 function getKeys(obj) {
    var keys = [];
    iterate(obj, function (oVal, oKey) { keys.push(oKey) });
    return keys;
  }

  function iterate(iterable, callback) {
    for (var key in iterable) {
      if (key === 'length' || key === 'prototype' || !Object.prototype.hasOwnProperty.call(iterable, key)) continue;
      callback(iterable[key], key, iterable);
    }
  }


对象/脚本:

var obj = {
    "set1": {
                "subSet1": {
                    "val1": "",
                    "val2": "",
                    "val3": ""
                },
                "subSet2": {
                    "val1": "",
                    "val2": "",
                    "val3": ""
                }
            }
            ...
    }
var arr = [];

Object.keys(obj["set1"]).forEach(function(key) {
   arr.push(obj["set1"][key][val1]);   
});

经过一些测试,我可以看出问题是:该for...in语句在移动设备上不起作用。

因为不可能(?)在移动设备上正确调试,所以我无法提供其他信息。(错误信息或某事)

你们有简单的解决方法吗?

tl/dr: 迭代对象键并用键名填充数组,而不使用for...in语句


编辑1:只是为了完成事情..这适用于PC,但不适用于移动设备

    var testObj = {"a":"aa", "b":"bb", "c":"cc"};

    for (var keys in testObj) {
        app.alert(keys)
    }

    for each (var keys in testObj) {
        // not working mobile either
    }


由于 DropDownLists 不是那么大,我需要完成一些事情,所以我现在将坚持手动创建我需要的数组。不过还是很好奇。

4

1 回答 1

0

Adobe Reader Mobile 无法使用 Acrobat JavaScript。使用 Reader Mobile 中不可用的 Field.setItems() 方法填充组合框 (DropDowns) 和列表框。

例如,在桌面版本上,以下代码将使用数组中的值填充“StateBox”字段。内部数组中的第一项是用户值(呈现在 UI 中),第二项是导出值(提交数据时导出的值)。

var c = this.getField("StateBox");    
c.setItems([["California", "CA"],["Massachusetts", "MA"], ["Arizona", "AZ"]]);

相同的代码在移动设备上只是失败而不会出现错误。

于 2019-09-12T15:30:09.197 回答