undefinedになってしまいます

[新着] Webテンプレートを仮オープンしました



0   名前: 彗星 : 2006/11/30(木) 21:53  ID:hgQlUB18
cwa=0;
t=0;
mm1=["あ","い","う","え","お"];

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

document.all.m1f(i).innerHTML ="<div onclick=cwa=mm1[i];t=1;tai(); style=font-size:16px;color:#ffffff;>"+mm1[i]+"<div>";
}

・
・
・
・
・
・

<div id=m1f></div>
<div id=m1f></div>
<div id=m1f></div>


のようにすると、cwaがundefinedになってしまいます。
mm1を宣言したら、スクリプトエラーになりました。

多分、onclickのところが駄目なんだと思います。
何方か教えてください。

1   名前: NullPo : 2006/11/30(木) 21:53  ID:1Bb3RL38
idは重複できないんだけど、div要素にname属性はつけられなかったかも。
どっちにせよ、IEでは認識しないみたいだな。
とりあえずdiv要素全部取得で書いておきます。適宜変更してください。
スクリプトの実行タイミングがわからないけど、これも適当に変えてください。

undefinedになるのは、mm1の6番目の要素がないから。
mm1[5]はundefined。
おそらくこれを代入した時点でのiの値を参照したいのだと勝手に推測。

<script type="text/javascript">

var cwa = 0;
var t = 0;

window.onload = function()
{
  var mm1 = ["あ", "い", "う", "え", "お"];
  var m1fs = document.getElementsByTagName("div");

  for (var i = 0; i < mm1.length; i++) {
    if( !m1fs[i] )
      return;

    m1fs[i].appendChild(document.createTextNode(mm1[i]));
    m1fs[i].onclick = new Function("cwa = '" + mm1[i] + "'; t = 1; tai();");
    m1fs[i].style.fontSize = "16px";
    m1fs[i].style.color = "#ffffff";
  }

}

</script>

<div></div>
<div></div>
<div></div>
<div></div>
<div></div>


2   名前: 牛若 : 2006/11/30(木) 21:53  ID:jZc6NeRT
ま、そのスクリプトが奇跡的に動いたとしての話ですが・・・
undefinedになるのは、イベントを実行した時点でスクリプトエンジンが
夢中で「i」なるものを探すんだけど、グローバル変数まで隅々探しても
結局「i」なるものをどこにも探し当てられなくて、しょうがなくてundefinedを
返してきたと、まあ、エンジンの気持ちを代弁すると・・・
これは人間の目には瞬時に返って来る反応なんだけど、エンジン側では、
夢中であちこち駆け回った末の判断なので、相当怒っていると思われる。
めちゃくちゃもここまでくれば、エンジンのかたを持ちたくなるのが人情。

>>1
var m1fs = document.getElementsByTagName("div");
としてforで回すのはいささか危険では?divは他にもあるかもしれないし・・・
質問者の意向に沿えば、

document.getElementById('m1f'+i).innerHTML=....

のような感じの方が確実だと思われるのだが・・・

3   名前: NullPo : 2006/11/30(木) 21:53  ID:1Bb3RL38
>>2
あぁ、クロージャじゃなくて文字列なのか。
でも>>0のコードならiは見つかるはず。windowのプロパティになっていると思われ。

>としてforで回すのはいささか危険では?divは他にもあるかもしれないし・・・
危険ですね。
なるほど、そちらのほうがよさそうです。

4   名前: 牛若 : 2006/11/30(木) 21:53  ID:AeYTa7GL
>>3
「i」はありますね。「しかし、代入されているモノが不明なので」に訂正します。
失礼しました。

5   名前: 彗星 : 2006/11/30(木) 21:53  ID:9vW0KjP2
無事解決しました。
NullPoさん 牛若さん、有難う御座いました。

一覧へ戻る