自动标记文本字段的两种不同条件

时间:2012-11-20 09:39:42

标签: javascript forms pdf acrobat

早上好,

首先,提前感谢您提供的任何帮助

我会尽可能清楚地解释自己:

我有一个包含30个相等文本字段的列,在表单中具有不可修改的宽度和高度。在文本字段中输入文本时,用户将有两个选项:

a)逐字输入

b)从另一个源复制一大块文本并将其粘贴到文本字段中。

现在,我想要的是为表单提供两个不同的选项,如果第一个文本字段已填充,则自动标签到下一个文本字段。

这是我迄今为止尝试过的两个选项,它们既可以单独使用,也可以不一起使用:

a)自定义击键脚本,比方说,Field.0:

if (event.fieldFull) {
     this.getField("Field.1").setFocus();
}

b)Field.0的自定义on-blur脚本:

var temp = new Array();
temp = this.getField("Field.0").value.split(' ');
var rest = "";
ini = temp[0] + ' ';
var charsRead = temp[0].length + 1;
var index = 1;
while ((charsRead + temp[index].length) < 110){
    ini = ini + temp[index] + ' ';
    index++;
    charsRead = charsRead + temp[index].length + 1;
}
for (var i=index ; i < temp.length-1 ; i++){
    rest = rest + temp[i] + ' ';
}
this.getField("Field.0").value = ini;
this.getField("Field.1").value = rest;
this.getField("Field.1").setFocus();

您可能已经注意到,我不是专家(甚至不是一个......)脚本编写者,因此代码可能效率低下或重复。

脚本的作用是:存储粘贴到数组中的块的单词(以便不将文本分割到单词的中间),并将第一个拟合单词复制到110个字符(任意数字,有时太少,有时太多了),然后将数组中的其余单词粘贴到下一个字段中。

当用户选中Field.0时,焦点设置为Field.1。如果文本仍然太长,当他从Field.1中选中时,焦点将设置为Field.2,并将第二个文本剩余部分粘贴到Field.2中。因此,他所要做的就是按Ctrl + V和TAB,TAB,TAB直到所有文本都占用了必要的字段。

现在,对于指向a)的解决方案,必须禁用滚动长文本,但是,用于解决问题b)的脚本是必要的。

我正在寻找的是一种独立于用户输入文本的方式,当字段已满时自动选项卡。完整的我的意思是文本已达到可见区域的终点。

在键入文本时(我想它必须使用按键脚本)或粘贴一个长短语(带有on-blur,因为按键在这里不起作用)。

对于这篇长篇文章感到抱歉,再次感谢您的帮助。

BTW:使用Adobe Acrobat X Pro。

1 个答案:

答案 0 :(得分:1)

如果您使用等宽字体,则可以确定文本字段中适合的字符数。 将粘贴的文本分解为该大小的块,然后将这些块分布在字段上。 因此,使用chunk function found here

//(On paste)
var brokenUpString = pastedString.chunk(maxInputLengthPerField);
for(var i = 0; brokenUpString[i]; i++){
    fields[i]value = brokenUpString[i]
}

现在,如果您想在用户输入时将光标移动到下一个文本字段,可能会有以下情况:

//(On key up)
var currentField = 0;
if(fields[currentField].value.length == maxInputLengthPerField){
    currentField++;
    fields[currentField].setFocus();
}

问题在于,当用户按下按钮时,检测输入了多少字符是“难”的,但是如果发生这种情况,您可以只取整个字符串,将其分解并分配到字段上。

(来自linkchunk()函数:)

String.prototype.chunk = function(size) {
    return [].concat.apply([],
        this.split('').map(function(x,i){ return i%size ? [] : this.slice(i,i+size) }, this)
    )
}