2 返信 最新の回答 日時: Jun 24, 2009 12:13 AM ユーザー:マコト01

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

    マコト01

      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を定義していないからだろうと思っているのですが、

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

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

       

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

        • 1. Re: JavaScriptで作成したユーザーインターフェイス
          seuzo-oJiFme Level 1

          >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の中からそれを呼んでしまっています。

          • 2. Re: JavaScriptで作成したユーザーインターフェイス
            マコト01 Level 1

            seuzo様

             

            ありがとうございます。

            無事格納されました。

             

            またそれ以外のアドバイスもありがとうございます。