• ベストアンサー

onClickイベントの変更方法

JavaScriptのonclickイベントについてですが、  <form name="fm">  <input type="button" name="bt" value="開始" onclick="Change(1)"> という感じのフォームで、ボタンを押すとChange関数の方で、  if(f == 1) {    document.fm.bt.value="停止";    document.fm.bt.onclick="Change(0)"; //(A) として、onclickイベントの内容を変更したいのですが、 実際には上のような(A)の文では、 エラーは出ませんが、イベントの実行はできません。 onclickイベントの変更方法をご教授下さい。 ちなみに、プログラム自体は別の方法で対処しましたので、 「もっといい方法がある」というご回答は結構です。 それと、もう一つ教えていただきたいのですが、上の例で、  document.writeln(document.fm.bt.onClick); と実行すると"undefined"と表示されますが、  document.writeln(document.fm.bt.onclick); //(onClickのCが小文字) と実行すると"function anonymous() { Change(1) } "と表示されます。 大文字と小文字で、なぜ動作が変わるのでしょうか? ご教授下さい。

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

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

document.fm.bt.onclick = new Function("Change(0);"); としてみてください。 私もわからなくて色々試してこうなりました。 勉強になりました。 別の方法ってinnerHTMLですかね?

Takochu
質問者

補足

ご回答ありがとうございます。 見事に解決しました。勉強になりました。 ちなみに別の方法とはinnerHTMLではなく、もっとシンプルで、  if(document.fm.bt.value == "開始") {    document.fm.bt.value="停止";      ・  ・  ・      ・  ・  ・  }  else {    document.fm.bt.value="開始";      ・  ・  ・      ・  ・  ・  } として、Change関数の引数をなくしました。 グローバル変数を使っても良かったのですが、 これの方がシンプルかと思いました。 開始と停止の切り替えをするだけでしたので、 無理にonClickイベントの内容を変更する必要はなかったということです。 勉強不足でした。 ちなみに、報告ですが、  document.fm.bt.onClick=new Function("Change(0);"); と、onClickを小文字にした場合、エラーは出ませんが、 イベントの変更はできませんでした。 やっぱり、小文字の方が正しいようですね。

その他の回答 (4)

  • Struts
  • ベストアンサー率48% (29/60)
回答No.5

大文字小文字の件ですが JavaScriptとHTMLはべっこと思ってください。 それぞれの仕様通りにしないと動きません。 仕様はリファレンス本等を見て確認することです。 まぁ、動かないということは仕様外だということです。 > リファレンス本などは大文字の方が多用 これは、HTML内に記述するイベント属性のことだと思います。(onClick等) HTMLの記述については大文字小文字は意識しなくていいです。 ただし、JavaScript内では、オブジェクトのセッターやゲッターを使用する場合は仕様に従わないといけません。もちろん大文字小文字の違いもです。 JavaScriptのリファレンス本では大文字小文字は統一されていると思います。(多分 ^^;)

Takochu
質問者

お礼

JavaScriptとHTMLはべっこなんですね。 おっしゃる通り、そういえば、手持ちの リファレンス本で大文字で記述されているところは、 全て、HTMLタグ内ですね。 ちょっと、混同してました。 とても、参考になりました。

回答No.4

onclickとonClickの違いについてですが、動く方が正しい。つまり、onclickの方が正しいということになると思います。 HTML上に書く場合にはどちらでも良いですが、JavaScriptで操作する場合には他にもこんな場合があります。 document.all.Txt_Test.readonly = false;//間違い document.all.Txt_Test.readOnly = false;//正しい readonlyの切り替えですが、HTML上はreadonly,readOnlyと両方指定できますが、JavaScriptではreadOnlyでなければ認識してくれません。 他にもありますが、私の場合、わからなくなったら、googleで検索して、かたっぱしから実行しています。

Takochu
質問者

お礼

readOnlyの場合は"O"だけ大文字なんですか。 なにか、命名ルールに一貫性がないような気が。 どちらか分からない場合、かたっぱしからやったほうが早いですね。 とても、参考になりました。

Takochu
質問者

補足

※※※※※※ 訂正 ※※※※※※ ANo.#3補足の > ちなみに、報告ですが、 > >  document.fm.bt.onClick=new Function("Change(0);"); > > と、onClickを小文字にした場合、エラーは出ませんが、 >        ~~~~~~ > イベントの変更はできませんでした。 下線部は「大文字」の間違いです。 この場をお借りして、訂正致します。 ※※※※※※※※※※※※※※※※

  • Struts
  • ベストアンサー率48% (29/60)
回答No.2

JavaScriptの関数内で使用されるオブジェクトがプリコンパイラ内で小文字で定義されているからだと思います。 ちなみに、valueも大文字が混じっていたりしたらだめだったと思います。 また、変数名や関数名など自由に決めれるものも大文字と小文字は別の文字として扱われます。

Takochu
質問者

補足

ご回答ありがとうございます。 ということは、"onClick"に限っては、"C"が 小文字での使用のほうがトラブルが少ないということでしょうか? リファレンス本などは大文字の方が多用されているように思うのですが。

  • clieat
  • ベストアンサー率27% (26/95)
回答No.1

それは大文字と小文字で別々の字として認識してしまうからです。 大文字は大文字で認識し、小文字は小文字で認識します。 htmlとかは全然関係ないんですけどね。

Takochu
質問者

補足

ご回答ありがとうございます。 onClickもonclickも、通常使用する分には 違いはないと思うのですが、質問に書いた例では 動作に違いが出てしまいます。 なぜなんでしょうか? しかも、小文字のときの動作の方が正しい動作に見えます。

関連するQ&A