0

おはようございます、

まず第一に、あなたが提供するかもしれないどんな助けにも前もって感謝します

私は自分自身をできるだけ明確に説明しようとします:

フォームの幅と高さを変更できない、30 程度の等しいテキスト フィールドの列があります。テキスト フィールドにテキストを入力するとき、ユーザーには 2 つのオプションがあります。

a) 単語ごとに入力する

b) 別のソースからテキストのチャンクをコピーし、テキスト フィールドに貼り付けます。

ここで、最初のテキスト フィールドが入力された場合に、フォームが次のテキスト フィールドに自動タブ移動するように 2 つの異なるオプションを用意する必要があります。

これらは私が今までに試した 2 つのオプションで、どちらも単独で使用すると機能しますが、一緒には機能しません。

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

お気付きかもしれませんが、私はスクリプターの専門家ではないため (1 人にさえ近くありません...)、コードが非効率的であるか、反復的である可能性があります。

スクリプトが行うこと: 配列に貼り付けられたチャンクの単語を保存し (単語の途中でテキストを分割しないように)、最初に適合する単語を最大 110 文字 (場合によっては過剰な任意の数) までコピーします。少し、場合によっては多すぎる)、配列内の残りの単語を取得して、次のフィールドに貼り付けます。

ユーザーがタブで Field.0 の外に出ると、フォーカスは Field.1 に設定されます。それでもテキストが長すぎる場合は、Field.1 からタブで移動すると、フォーカスが Field.2 に設定され、テキストの 2 番目の残りがそこに貼り付けられます。したがって、彼がしなければならないことは、すべてのテキストが必要なフィールドを占めるまで、Ctrl+V と TAB、TAB、TAB だけです。

ここで、a) を解決するには、長いテキストのスクロールを無効にする必要がありますが、問題 b) を解決するために使用するスクリプトには必要です。

私が探しているのは、ユーザーがどのようにテキストを入力したかに関係なく、フィールドがいっぱいになったときに自動タブする方法です。完全とは、テキストが THE END OF THE VISIBLE AREA に到達したことを意味します。

テキストを入力している間(キーストロークスクリプトを使用する必要があると思います)、または長いフレーズを貼り付けるとき(ここではキーストロークが機能しないため、オンブラーを使用)です。

長い投稿で申し訳ありませんが、もう一度助けてくれてありがとう.

ところで:Adobe 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 に答える