電子書籍の厳選無料作品が豊富!

引数付きで呼び出す関数・配列・name(id)のつけ方・・・?
何を質問したいのかわからないタイトルになってしまいましたが
とりあえず下のソースコードを見てください(実行してください)。

<html>
<head><title>up</title>
<script language="JavaScript">
<!--

num=new Array("5","5");
str=new Array("*****","*****");

function up(j)
{
num[j]++;
str[j]+="*";
text[j].innerHTML=num[j]+str[j];
}

//-->
</script>
</head>
<body>
<input type="button" value="1" onClick="up(0)"><div id="text1">5*****</div><br>
<input type="button" value="2" onClick="up(1)"><div id="text2">5*****</div>

</body>
</html>

1のボタンを押すと上の文字列が反応し、2のボタンを押すと
下の文字列が反応するプログラムを書きたいのですが、どっちの
ボタンを押して関数が呼び出され、どっちの文字列に処理を
するか区別することができません、どうしたらよいのでしょうか?
下のようにひとつの時はできました・・・。でもふたつの時は
どうしたらいいのかわかりません。

<html>
<head><title>up</title>
<script language="JavaScript">
<!--

num=5;
str="*****";

function up()
{
num++;
str+="*";
text1.innerHTML=num+str;
}

//-->
</script>
</head>
<body>
<input type="button" value="1" onClick="up()"><div id="text1">5*****</div>

</body>
</html>

A 回答 (6件)

wolfwoodさんと同じです。


text[j] が text1 っていうidとして認識されていないから、
text1 という文字列を eval() でidとして認識させます。

具体的には
text[j].innerHTML=num[j]+str[j];

eval("text"+(j+1)).innerHTML=num[j]+str[j];
にします。
    • good
    • 0

こうするのは駄目なの?



<html>
<head><title>up</title>
<script language="JavaScript">
<!--
  num=new Array("5","5");
  str=new Array("*****","*****");

  function up(j)
  {
    var txt = document.all("text");  ---1
    num[j]++;
    str[j]+="*";
    txt[j].innerHTML=num[j]+str[j];  ---2
  }
//-->
</script>
</head>
<body>
<input type="button" value="1" onClick="up(0)"><div id="text">5*****</div><br>  ---3
<input type="button" value="2" onClick="up(1)"><div id="text">5*****</div>  ---4
</body>
</html>

1を追加
2の所を、text[j]からtxt[j]へ
3の所を、text1からtext
4の所を、text2からtext

以上
    • good
    • 0

まず、up() 内でDIVオブジェクトを識別できるように、DIVのIDを引数で渡しましょう。


IDからオブジェクトの逆引きは、document.all(id) でできます。
※IE以外ではそれ以外の処理が必要になります。

またDIV内の表示内容を配列で保存していますが、常時 innerText プロパティで参照可能なので、この値を数値と文字列に分解し、処理を施した後、また戻してやればよいでしょう。

で、改良するとこんな感じ。

<html>
<head><title>up</title>
<script language="JavaScript"><!--
function up(divId) {
  var div = document.all(divId);     // IDからオブジェクトを逆引き
  div.innerText.match(/^(\d+)(.*)$/);  // matchを利用して、数値と文字列を取り出す
  var num = RegExp.$1 - 0 + 1;    // - 0 で数値化し、1 を足す
  var str = RegExp.$2 + '*';       // * を増やす
  div.innerText = num + str;      // innerText に戻す
}
//--></script>
</head>
<body>
<!-- up() の引数に、対象のDIVオブジェクトIDを渡す -->
<input type="button" value="1" onClick="up('text1')"><div id="text1">5*****</div><br>
<input type="button" value="2" onClick="up('text2')"><div id="text2">5*****</div>
</body>
</html>

※IE5.5確認済み
※全角スペースを入れているので、半角スペースかタブに変換してください。
    • good
    • 0

""+(数値)で、数値を文字列にかえることができるので、


こんなふうに書けると思います。

num=new Array(5,5);
str=new Array("*****","*****");

function up(j){
num[j]++;
str[j] += "*";

tmp = "text" + ""+(j+1);
tmp.innerHTML = ""+num[j] + str[j];

私ならこうする、くらいですけど。
    • good
    • 0

eval関数でidのnameを生成すれば良いと思います。



例)
function up(j)
{
num[j]++;
str[j]+="*";
var hoge = eval("text"+(j+1));
hoge.innerHTML=num[j]+str[j];
}
    • good
    • 0

<div id="text1">、<div id="text2">は配列ではないのでswitch文で切り分けます。


switch(j){
case 0:
text1.innerHTML=num[j]+str[j];
break;
case 1:
text2.innerHTML=num[j]+str[j];
break;
}

(idを両方ともtextにしてしまう方法でも実行はできてしまいますが…)

この回答への補足

ありがとうございます。switch文を使うのもよいのですが、switch文以外の方法はありませんか?この場合、caseも2通りでそれぞれの処理も短いので問題ないのですが、もしcaseが増え処理も長くなった場合、大変なことになります。textにも配列を作り関数内でtext[j]のような形で使いたいのですが・・・

補足日時:2002/06/28 09:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!