• ベストアンサー

JSで同じような処理を関数化できないでしょうか?

クリック時にinputに何もなければ空という要素を作って表記し、その後入力してクリックしたらその要素が消えるようにしたいです。 そしてこのinputが5くらいあるのですが、この場合単純にやれば5個 emptyElement1 = true; emptyElement2 = true; と5個別名で作ればどのinputが空で空と表記されているか判断できることはわかるのですが、同じような処理でただ変数名がちょっと違う事により、 何番の空の要素が存在するか確認して作業を切り替えるだけなのに5個分書くのはプロから見てどうですか? もっとプロなっとくな方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

はい、配列ですね。 配列に初期値を代入しておきたい場合は下記のようになります(「false」の初期値を5つの配列要素に代入したい場合)。 配列のサイズは「~.length」で取得できます。 var emptyElement = [false,false,false,false,false]; ↑大量の初期値を代入するのも面倒な場合は、ループとかでの処理も考えられますが、「undefined」でも対応できるようにすれば良いでしょう。 配列要素はゼロ・スタートです、5つの配列要素の場合、「0~4」の要素になります。 この場合の配列のサイズ「emptyElement.length」は「5」になります。 ループとかで処理するとか考えられます。 emptyElement[0]; = true; emptyElement[1]; = true; … emptyElement[4]; = true;

okweb12345
質問者

お礼

空の配列をとりあえず作るのは駄目なんですか? 変数と同じで何もないとundefinedが自動に入ってそれ自体が利用できないのでしょうか? またループとはwhileやforでインデックス分だけ繰り返して連番だけ自動に付与すると手動でなくできる分楽と言うことでしょうか?

その他の回答 (13)

回答No.4

>空の配列をとりあえず作るのは駄目なんですか? >変数と同じで何もないとundefinedが自動に入ってそれ自体が利用できないのでしょうか? 値がundefinedの場合にも対応できるようにプログラミングすればおkです。 >またループとはwhileやforでインデックス分だけ繰り返して連番だけ自動に付与すると手動でなくできる分楽と言うことでしょうか? そのとおりです、 >むずかしいですね。 >newで下記配列を作っているのですか? >var emptyElement = [false,false,false,false,false]; 違います、「new Array(5);」の場合の配列要素の初期値は「undefined」です。

okweb12345
質問者

お礼

>>> >むずかしいですね。 >newで下記配列を作っているのですか? >var emptyElement = [false,false,false,false,false]; 違います、「new Array(5);」の場合の配列要素の初期値は「undefined」です。 これは配列の書き方が違うだけで同じことをやっていると聞いたのですがそうではないのですか? 配列の宣言の仕方によって、中身がundefinedだったり、それ以外?null?だったりするという事ですか? >>> >またループとはwhileやforでインデックス分だけ繰り返して連番だけ自動に付与すると手動でなくできる分楽と言うことでしょうか? そのとおりです、 つまり違いは最後の数値だけをインクリメントしていけるという事ですね。 現場ではこのやり方が主流ですか? それとも5つの処理があれば5つそれぞれに aaa1 aaa2 と記載する方が管理しやすいとかんがえますか?

回答No.3

>回答No.2 amanojaku1 >配列に初期値を代入しておきたい場合は下記のようになります(「false」の初期値を5つの配列要素に代入したい場合)。 >配列のサイズは「~.length」で取得できます。 > >var emptyElement = [false,false,false,false,false]; > >↑大量の初期値を代入するのも面倒な場合は、ループとかでの処理も考えられますが、「undefined」でも対応できるようにすれば良いでしょう。 > >配列要素はゼロ・スタートです、5つの配列要素の場合、「0~4」の要素になります。 var emptyElement = new Array(5); ↑このように定義すると5つの配列要素が作成されます、配列要素はゼロ・スタートで、「0~4」の要素になります。 この場合の配列要素の初期値は「undefined」です。

okweb12345
質問者

お礼

むずかしいですね。 newで下記配列を作っているのですか? var emptyElement = [false,false,false,false,false];

  • t_ohta
  • ベストアンサー率38% (5076/13258)
回答No.1

配列使えばいいんじゃないですか。

関連するQ&A

  • ユーザー定義関数の処理

    エラーメッセージに関する以下の関数はどのような処理をする関数ですか? 自分なりに解釈したものを//で書いています。 // エラーがセットされているときは、$errorsを返す // もしセッション変数にエラーがないときは、空の配列を返す function get_errors(){ // セッション変数にエラーがセットされているときは$errorsを以下のように定義する $errors = get_session('__errors'); if($errors === ''){ return array(); } // もしセッション変数にユーザー名($name)がセットされているなら、セッション情報を返す // セットされていないときは空文字を返す function get_session($name){ if(isset($_SESSION[$name]) === true){ return $_SESSION[$name]; }; return ''; } // $nameと$valueを受け取り、セッション情報(ユーザー名)を$valueと定義する function set_session($name, $value){ $_SESSION[$name] = $value; }

    • ベストアンサー
    • PHP
  • jQueryで要素を取得した後の使い方について

    jQueryでグローバル変数に要素を代入した後にその変数を利用したいのですが記述方法がわかりません。 var element; // クリックしたinputの要素をelementに代入 $(function(){  $("input").click(function(){   element = $(this);  }); }); // elementを利用する function alertEx(){  alert($(element).val()); } alertEx関数を実行するとクリックしたinputの値を表示するようにしたいです。 alertEx関数でのelementの使い方が間違っていると思うのですが、どのように記述すればinputの値をalert表示できるのでしょうか? 知りたいのは、あくまでも要素をelementに代入した後の利用の仕方です。 表示方法とかではないです(上記コードは例です)。 どうぞよろしくお願い致します。

  • 複数の配列の要素を繰り返し処理をして書き込むと変数の中身がおかしくなってしまいます。

    いつもお世話になります 複数の配列の要素を繰り返し処理をして書き込むと変数の中身がおかしくなってしまいます。 ポストメソッドで複数のテキストを受けて書き込みたいのですが、書き込む内容が""になってしまいます print qq|<form action=\"$myself\" method=\"POST\">\n|; LOOP: foreach $i (0..7) { foreach $j ($x..$x + 3) { print qq|@eqipument[$j]<input type=text name="arg_$j" size_1=35>\n|; last LOOP if ($j == $#eqipument); } $x = $x + $x_colm; print qq|<br>\n|; } @eqipumentの配列の要素を変数arg_$jで配列が終わるまで繰り返して入力画面を表示させます その後 # デスク書き込み open(OUT,">>$logfile") || &error("Write Error : $logfile"); $j = 0; foreach(0..@eqipument) { print OUT "$in{'arg_$j'}<>"; $j++; } close(OUT); として書き込みをすると、変数arg_$jの内容が空になってしまい<>だけがかきこまれます 変数部分を arg_0,arg_1,arg_2.... と明示して書くときちんと入力画面で入力した テキストが書きこめれますが、入力項目も多いですしプログラム的にも見難いので 繰り返し処理で書き込みをしたいのですがなぜこのような結果になるのか(arg_$jの内容が空になる)理解できません又 print qq|$in{'arg_$j'}\n|;として 変数の中身を検証するためにコンソールに出力すると中身は "" になっています 宜しく御教授お願いします。

    • ベストアンサー
    • Perl
  • 配列内の要素をパターンマッチする

    @inputと$ansがあります。プログラムを実行するなかで@inputに要素を加えて行きます。実行の条件により要素数はことなります。 $ansというデータを与えられたときに$ansが@input内に存在しなければ次の処理に行くといった感じのプログラムを作ろうとしています。 私は@input内の要素と$ansをパターンマッチさせてマッチしなければ次に行くっといった感じのプログラムにしたいのですが配列内の要素をパターンマッチする方法がイマイチ分りません。 どなたか教えて下さい。お願いします。

    • ベストアンサー
    • Perl
  • for文内での関数の使用がうまくいきません。

    いつもお世話になってます。flash初心者です。 環境:flash 2004 MX, WIN XP ボタンが3つ、それぞれ a0, a1, a2~ a(n個)という名前で存在します。このボタンを押したときに変数の値を代入するためのスクリプトを作りました。 文が長くて、for文を使って、繰り返しの処理を省略したいのですが、for文内で、変数に 配列の値を代入することに失敗してしまいます。 まず、ダイナミックテキストの変数名を myhoge にする。 //各ボタン用のテキストを定義 var hoge = new Array(); hoge[0] = "0番のボタンを押したときのテキスト"; hoge[1] = "1番のボタンを押したときのテキスト"; hoge[2] = "2番のボタンを押したときのテキスト"; ↓ hoge[99] = "99番のボタンを押したときのテキスト"; for (var i:Number = 0; i <= 99; i++) { _root["a"+i].onRelease = function() { _root.myhoge = _root.hoge[i]; } } 上記で、該当ボタンをクリックしたときは、ボタンは反応するのですが、配列のところがうまくいってないみたいです。 原因がわかる方いらっしゃいましたらお願いいたします。

  • スコープ内の処理終了次第変数の中身が捨てられる

    スコープ内の処理終了次第変数の中身が捨てられるので、困ります。 フラグが使えません。 グローバルで宣言するとできるのですが、こんなに離れている管理しにくくないですか? もっと近くで残すことは仕様上できないのでしょうか? グローバル var emptyElement; これはずっと残っているグローバルは中身がスコープ内の処理が終わってもずっとリロードするまで残る仕様??? 即時関数内下   var emptyElement; クリック終了次第中にが捨てられる aaa.addEventListener('click', function() { emptyElement = true; } });

  • Excel VBA で処理中断(DoEvents)ができなくて困ってい

    Excel VBA で処理中断(DoEvents)ができなくて困っています。 まず、CommandButton1ボタンでSampleをコールし、Sample処理の中でループを廻し、途中でCommand1ボタンをクリックして、処理中断(DoEventsによって)をいれたいと思っています。 しかし、Command1ボタンをクリックしても処理中断がきかないのです。 グローバル変数fStopにはCommand1ボタンをクリックしたときにTrueが入っていることは、MsgBoxで確認していますが、Sample処理の方に値がつたわっていないようで、ループが最後まで止まりません。 コードが悪いのでしょうか、それとも、DoEventsの使い方が悪いのでしょうか。 もし、DoEventsが使えないのであれば、代替手段はありますでしょうか。 (長時間の印刷中の処理中断に応用したいと思っています) 環境はExcel 2002 SP3 , VB 6.0 , Windows XPです。 なお、DoEventsのコードは以下のURLを参考にして作成しました。 http://officetanaka.net/excel/vba/function/DoEvents.htm コードは以下のとおりです。 '********* Dim fStop As Boolean 'グローバル変数を宣言 '********* Sub Sample() Dim i As Long fStop = False For i = 1 To 1000000 DoEvents If fStop = True Then MsgBox "処理が中断されました" Exit For End If Next i End Sub '******** Private Sub CommandButton1_Click() Call Sample End Sub '******** Private Sub Command1_Click() fStop = True MsgBox "fStop=" & fStop End Sub

  • クリックされた行を取得したい

    次の処理を行いたいのですが,どのようにすればいいのでしょうか。 1.document がクリックされたときに,どの要素がクリックされたかを調べる。 2.その要素がid="tbody1"のtbodyタグ内にある場合,次の操作を行う。 3.変数trにクリックされたテーブルの行を指定する。 4.変数tdContentに先程のtr内の第一列目のセルの内容を代入する。 trタグはJavaScriptで自動生成しているので,できれば上の手順でid属性を追加せずに済むようにしたいです, 極力処理を省いたつもりなので,よろしくお願いします。

  • メソッドの処理文の種類

    Javaのメソッドの処理は{}の中に書いて、一文ごと文末に「;」を付けます。セミコロン~セミコロンが処理文の単位で、許されたプログラミング規則に従って処理文を書きます。その処理文の種類を網羅したホームページをご存知でしたら教えてください。日本語が良いです。そのURLを提示してくれると幸いです。 私は11個だけ知っています。それを下に並べると、 (1)他メソッドの呼び出し:System.out.println("");setName("佐藤");getName(); (2)ローカル変数の宣言:int a;String a;Program java; (3)代入:a=0;a=b;a=a+3;a=5+3*3/3%1-2;a=true^true&true&&false;a=(Apple)b; (4)インクリメントとデクリメント:a++;++a;a--; (5)オブジェクトの生成:new DefaultConstractor();new Dog("ハチ公"); (6)条件分岐・判断:if(true){・・・;}else{・・・;} switch case (7)繰り返し・反復:while(true){・・・;} for(Object o:list){・・・;} (8)値を返す・メソッド終了宣言:return a;return "佐藤";return 1+1; (9)例外処理:try{・・・;}catch{・・・;}finally{・・・;} (10)アサーション:assert true; (11)インナークラス:interface InnerI{} enum InnerE{} 12、13と他にもある気がして、それを全て網羅して箇条書きなっているマニュアルがあれば分かり易いと思い、質問しています。 何か処理を書いてコンパイルが通るとき、それは上の(1)~(11)に当てはまるからです。1+1;と書いてもエラーになって、「文の左に代入する変数の指定が抜けています」といったメッセージが出ます。単に1+1だけを計算して代入を省くような処理は上の(1)~(11)に無いのです。 英語ホームページなら有って日本語だと無いとなると、日本のITの脆弱性を感じます。アメリカやイギリスのIT輸入に依存しているような気がして、少し残念です。国産の誇れるITを世界に発信したいなー。

    • ベストアンサー
    • Java
  • VBAで「セルに何か入っている場合」

    EXCELでVBAを使いアプリケーションを作っています。 今「このセルに何か入っている(何でも良い。とにかく空でない)場合、この処理」という意味のプログラムを書きたいのですが、「このセルに何か入っている場合」の部分がどうしてもわかりません。null、isnull、emptyなど片っ端から試してみたり、逆に問題のセルが空欄の時にfalseになる変数を前もって設定して、その変数がtrueの時に処理させようとしたりしてみたのですが、すべてうまく行きませんでした。 解決法を教えていただけたら幸いです。

専門家に質問してみよう