使用 for 循环搜索字段数组以查找和替换文本

问题描述

我使用 Adob​​e Designer (LiveCycle) 创建了一个 XFA 表单,该表单使用了 25 个文本字段。我正在尝试创建一个“编辑”按钮,按下该按钮时,将遍历 25 个字段并在每个字段的字符串值中搜索名称。如果找到名称,则使用全局 RegExp 将名称替换为“********”,如果没有,则移至下一个字段。这是我到目前为止想出的,但它不起作用。有人可以帮忙吗?

var name = nameGlobal.value.toString();
 var regExp = new RegExp(name,"gi");
 var fields = [
  xfa.resolveNode("form1.#subform[3].#subform[4].N_Location.F1.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].N_Witnesses.Notes_2.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].F2.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_4.TextField7").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_5.TextField7").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_6.TextField9").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_7.N_7_2.TextField10").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_7.N_7_4.TextField11").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_7.N_7_6.TextField12").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_7.N_7_8.TextField13").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_7.F4.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F5.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F6.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F20.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.PupilSize.F7.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F8.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F9.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F10.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F11.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.#subform[20].TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_9.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Notes_10.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].F13.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].F14.TextField5").rawValue.toString(),xfa.resolveNode("form1.#subform[3].#subform[4].Msic_Notes.TextField5").rawValue.toString()
];

 for (i = 0; i < fields.length; i++) {
    if (fields[i] !== null) {
    fields[i] = fields[i].replace(name,"********");
     }
    }

解决方法

替换不起作用的主要原因是因为 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SEND_SMS" /> 方法返回一个新字符串,而不是指向该值的指针。

您可以通过放置节点的引用而不是 rawValue 字符串来解决此问题。

使用一些旧的 javascript...

toString()

使用现代 javascript...(不确定是否支持)

var name = nameGlobal.value; // might need to add toString() back
var regExp = new RegExp(name,"gi");
var fields = [xfa.resolveNode("path_to_node")];
 
for (var i = 0; i < fields.length; i++) {
  var rawValue == fields[i];
  if (rawValue !== null) {
    fields[i].rawValue = rawValue.replace(regExp,"********");
  }
}

希望对你有所帮助:)

,

所以我让它工作了,这就是我所做的:

var replace = nameGlobal.value.toString();
var regExp = new RegExp(replace,"gi");
var fields = [
  "form1.#subform[3].#subform[4].N_Location.F1.TextField5","form1.#subform[3].#subform[4].N_Witnesses.Notes_2.TextField5","form1.#subform[3].#subform[4].F2.TextField5","form1.#subform[3].#subform[4].Notes_4.TextField7","form1.#subform[3].#subform[4].Notes_5.TextField7","form1.#subform[3].#subform[4].Notes_6.TextField9","form1.#subform[3].#subform[4].Notes_7.N_7_2.TextField10","form1.#subform[3].#subform[4].Notes_7.N_7_4.TextField11","form1.#subform[3].#subform[4].Notes_7.N_7_6.TextField12","form1.#subform[3].#subform[4].Notes_7.N_7_8.TextField13","form1.#subform[3].#subform[4].Notes_7.F4.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F5.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F6.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F20.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.PupilSize.F7.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F8.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F9.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F10.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.F11.TextField5","form1.#subform[3].#subform[4].Notes_8.ClinicalNOtes.#subform[20].TextField5","form1.#subform[3].#subform[4].Notes_9.TextField5","form1.#subform[3].#subform[4].Notes_10.TextField5","form1.#subform[3].#subform[4].F13.TextField5","form1.#subform[3].#subform[4].F14.TextField5","form1.#subform[3].#subform[4].Msic_Notes.TextField5",];

for (i = 0; i < fields.length; i++) {
    var val = xfa.resolveNode(fields[i]).rawValue;
    if (val !== null) {
        if (val.search(regExp) !== -1) {
            xfa.resolveNode(fields[i]).rawValue = val.replace(regExp,"*******").toString();
      }
    }
  }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...