Home/Support/

Forums

This Question is Answered

2 "helpful" answers available (5 pts)
2 Replies Last post: Jun 24, 2009 1:13 AM by マコト01  
マコト01 User 6 posts since
Jun 18, 2009
Currently Being Moderated

Jun 18, 2009 10:53 PM

JavaScriptで作成したユーザーインターフェイス

InDesign CS3を使用しています。

自動処理用のユーザーインターフェイスを作成していますが、

2つ目のダイアログに入力した文字列を受け渡しできなくて困っています。

以下コードを抜粋しました。

 

//最初に表示されるダイアログ

var myDialog = app.dialogs.add({name:"test"});
var CR = String.fromCharCode(13);
with(myDialog){
    with(dialogColumns.add()){
        with(borderPanels.add()){
            with(dialogColumns.add()){
                staticTexts.add({staticLabel:"枠数:"});
            }
            with(dialogColumns.add()){
                var myinteger1 = integerEditboxes.add({editValue:1})
            }
        }
        with(borderPanels.add()){
            with(dialogColumns.add()){
            staticTexts.add({staticLabel:"列数:"});
            }
            var myinteger2 = integerEditboxes.add({editValue:2});
            }

 

        with(borderPanels.add()){
            var Rb = radiobuttonGroups.add();
            with(Rb){
            var Rb1 = radiobuttonControls.add({staticLabel:"標準作成", checkedState:true});
            var Rb2 = radiobuttonControls.add({staticLabel:"入力作成"});
            }
        }
    }
}
if(myDialog.show() == true){
        myStd();
    }

//次に表示されるダイアログ

function myStd(){
    var myDialog1 = app.dialogs.add({name:"test"});
    var myint1 = myinteger1.editValue;
    var myint2 = myinteger2.editValue;
    with(myDialog1){
        with(dialogColumns.add()){
        if(myint1 != 1){
            with(borderPanels.add()){
                staticTexts.add({staticLabel:"(1)文字を入力してください。"});
                }
            with(borderPanels.add()){
            for(i=0; i<myint1; i++){
                with(dialogColumns.add()){
                var myStr = textEditboxes.add({editContents:""});
                }
            }
        }
    }
                with(borderPanels.add()){
                staticTexts.add({staticLabel:"文字を入力してください。"});
                }
            for(j=1; j<myint2; j++){
            with(borderPanels.add()){
                for(i=0; i<myint1; i++){
                    with(dialogColumns.add()){
                    var myStr2 = textEditboxes.add({editContents:""})
                    }
                }
            }
        }
    }
}
myDialog1.show();
var myStr1 = myStr.editContents;
alert(myStr1);   
}

 

1つ目のダイアログで入力した枠数を2つ目のダイアログで自動作成したところまではいいのですが、

実行結果のアラートには2つ目のダイアログに入力した最後の文字だけ受け渡されてしまいます。

editContentsを定義していないからだろうと思っているのですが、

どうやって定義していいかわからないのです。

実行結果のアラートにそれぞれ入力した文字を受け渡すにはどのようにすればよろしいのでしょうか。

 

ご教示よろしくお願いいたします。

seuzo User 86 posts since
Jan 12, 2002
Currently Being Moderated
1. Jun 19, 2009 12:08 AM in response to: マコト01
Re: JavaScriptで作成したユーザーインターフェイス

>editContentsを定義していないからだろうと思っているのですが、

 

ループの中でmyStrをガンガン上書きしているからです。

 

fanctionの最初に

var myStr = new Array();

とでも宣言しておいて、該当部分を

myStr[i] = textEditboxes.add({editContents:""});

とでもするといいと思います。

呼び出すときは

for (var i = 0; i< myStr.length; i++) {

alert(myStr[i].editContents);

}

みたいに呼び出します。

 

気になった事が2つ。

dialogがちゃんと片付けられていないこと。表示しおわったときと、キャンセル終了したとき。

もうひとつは、グローバル変数が使われていること。fanctionの中からそれを呼んでしまっています。

More Like This

  • Retrieving data ...