• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaScript 関数名)

関数名のルールによって動作しないJavaScriptの問題

このQ&Aのポイント
  • JavaScriptの参考書を読みながら、フォームのボタンがクリックされると、新しいウィンドウで別のページを開くといった簡単なものを書いているところです。
  • 関数名をclickとした場合、ボタンがクリックされたらonclick="click()"で関数が呼び出されるようにしましたが、上手く動作しません。
  • 色々と試していくうちに、関数名を変えると動作することがわかりましたが、関数名をclickとする場合だけ上手く動作しないのはなぜでしょうか?関数名の付け方のルールも守っているように思います。

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

  • ベストアンサー
  • Chaire
  • ベストアンサー率60% (79/130)
回答No.1

質問者氏は悪くありません。仕様の「バグ」です。 <form action="#"> <p><input onclick="click();"></p> </form> このように書いた場合、まず input.click() を実行しようとします。そして実際、input.click() は存在しますので、これが実行されます。すると onclick の無限ループになりそうですが、そこはブラウザがうまいこと止めてくれます。 もし仮に、ここで input.click() がなければ、今度は form.click() を実行しようとします。click() ではなく submit() にすると分かりやすいでしょう。以下の例は form.submit() が実行されます。 <form action="#"> <p><input onclick="submit();"></p> </form> もし仮に form.submit() がなければ document.submit() を、それもなければ、やっと window.submit() を実行します。 何でこんな仕様になっているのか。昔の IE がそう実装し、多くの人がそれを使い、他のブラウザも追随したからです。昔のスクリプトを動かすためにも、今さら変えられないわけで。わずかな字数を惜しんだ結果、将来に禍根を残した例のひとつと言えます。 そういうわけで、関数名や変数名を考えるときは、どのオブジェクトも持ちそうにない名前にして下さい。こういうのを避けるため、名前空間代わりのオブジェクト(例えば myfunctions = { })を設け、これのメソッドとして関数を定義するといった形もあります。

kirinraitu
質問者

お礼

くわしい回答ありがとうございます。 プログラミング初心者で名前空間というもの知らなかったので、 そちらも勉強してみようと思います。 ありがとうございました。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

絶対に既存メソッドと同じにならないよう 日本語の関数名、シンボルを使ったら如何でしょう。 私は環境が許す限り、関数や変数のシンボルには 日本語名を付けています。だって、分かり易いでしょ。

kirinraitu
質問者

お礼

回答ありがとうございます。 これからは私も日本語名を付けることにします。

  • Chaire
  • ベストアンサー率60% (79/130)
回答No.2

No.1 訂正: × 昔の IE がそう実装し、 ○ 昔の Netscape と IE がそう実装し、

関連するQ&A