0

早上好,

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

我将尝试尽可能清楚地解释自己:

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

a) 逐字输入

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

现在,我想要的是有两个不同的选项,如果第一个文本字段已被填写,表单将自动跳到下一个文本字段。

这是我到目前为止尝试过的两个选项,它们在单独使用时都可以使用,但不能一起使用:

a) 自定义按键脚本,比如说 Field.0:

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

b) Field.0 的自定义模糊脚本:

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,并将文本的第二个剩余部分粘贴到其中。因此,他所要做的就是 Ctrl+V 和 TAB、TAB、TAB,直到所有文本都占据了必要的字段。

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

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

无论是在输入文本时(我想它必须使用击键脚本)还是在粘贴长短语时(使用模糊,因为击键在这里不起作用)。

很抱歉发了这么长的帖子,再次感谢您的帮助。

顺便说一句:使用 Adob​​e Acrobat X Pro。

4

1 回答 1

1

如果您有等宽字体,则可以确定文本字段中可以容纳多少个字符。将粘贴的文本分成该大小的块,然后将这些块分布在字段上。因此,使用chunk 此处找到的功能

//(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();
}

问题是当用户按住按钮时检测输入了多少个字符是“困难的”,但如果发生这种情况,您可以将整个字符串分解,然后将其分布在各个字段中。

chunk()来自链接的功能:)

String.prototype.chunk = function(size) {
    return [].concat.apply([],
        this.split('').map(function(x,i){ return i%size ? [] : this.slice(i,i+size) }, this)
    )
}
于 2012-11-20T10:03:14.287 回答