- ベストアンサー
なぜonclick属性のJavaScriptはscriptタグなしで動作するのか?
- JavaScriptのonclick属性によるイベントハンドラの動作原理を解説します。
- onclick属性ではJavaScriptを直接記述することで、ボタンクリック時の処理を実行できます。
- onclick属性はHTMLタグ内に直接記述され、ブラウザがその部分をJavaScriptとして解釈して実行します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Another HTML-lint で HTML チェックするとしつこく注意されることなので、たぶん記憶にはあるはずだと思いますが。 HTML 4.01 では、ページ内でイベント属性を使う場合、必ず Content-Script-Type を指定しなければなりません。 <meta http-equiv="Content-Script-Type" content="application/javascript"> いちいち meta 要素を書きたくなければ、HTTP ヘッダとして出力することもできます。 Content-Script-Type: application/javascript これをデフォルトのスクリプト言語と呼びます。すなわち、何も指定されないときに解釈されるスクリプト言語、要するにイベント属性の言語です。デフォルトのスクリプト言語を指定せずにイベント属性を書くのは、ルール違反です。 --- とはいえ、これによってブラウザがスクリプト言語を切り替えることはなく、ほとんどの人も形式的に従っているだけです。だから、HTML(5) では上のルールを廃止し、デフォルトのスクリプト言語を JavaScript 一本に絞りました。 HTML(5) を書く人は、逆に、上の meta 要素を書いてはいけません。 --- 余談ながら、IE だけはイベント属性のスクリプト言語を切り替えることができます。 <a language="VBScript" onclick="MsgBox('OK')">... <a onclick="vbscript:MsgBox('OK')">... だから、<a href="javascript:..."> と混同して onclick="javascript:..." のように「間違って」書く人が多いですが、これは IE で本当に効力を持ちますので、気を付けて下さい。 ※そもそも <a href="javascript:..."> も、もう書くべきではないものですが。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
・onclickに書いたことが実行されることについて htmlの規格です。 ・その実行が他の言語で無くJavaScriptであることについて No2の方がお書きの通り。
お礼
情報ありがとうございます。 参考になりました。
- flyingbee
- ベストアンサー率26% (49/182)
scriptといえば普通の人はJAVAScriptでしょう。 ということなのでブラウザの初期値として指定されているだけって話で 文法的には全くの間違いなので省略はやめましょう。 仮に10年後、JAVAScriptが駆逐されていたとしたら、 そのソースは動作しないことを意味しますよ。
お礼
情報ありがとうございます。 >文法的には全くの間違いなので省略はやめましょう。 これも覚えておくことにします。
補足
情報ありがとうございます。 すみません。かなり私の質問の仕方が悪いことに今気づきました。 javascriptをhtml内に記述する時、 <script type="text/javascript> ~~処理~~ </script> だと思っています。 ただ、ボタンをクリックした時に、メッセージが表示される簡単なHTMLをonclickで作成しました。 以下ソースになります。 ★ソース <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>イベント</title> </head> <body> <form> <input type="button" value="イベント発生" onclick="alert('クリック確認。')"> </form> </body> </html> 上記ソースだけでクリックされたイベントが実行されます。(headタグにscript記述なしで動作確認。) 質問:なぜ、<script type="text/javascript">記述がなくても、onclickのイベントハンドラは動くのでしょうか? onclick等のイベントハンドラに動作を記述する際は、そういう物だと覚えておいたほうがいいのでしょうか? 参考書には、javascriptは、<script type="text/javascript">タグ内に記述するとあったのですが、 onclick(上記ソースの場合は、そのルールに反しているのに、javascript)が作動しています。 ※当然関数をonclickに使用する際は、onclick=関数(); と記述し、headの<script type="text/javascript">タグ内に関数を記述すれば動くというのは分かっているのですが・・・。 ・onclick 属性 = javascript という判断をどこかでされているのでしょうか? その結果、<script type="text/javascript">記述がなくても動く? と言うことなのでしょうか。 申し訳ありません。再度質問させて頂きたいと思います。
お礼
情報ありがとうございました。 <meta http-equiv="Content-Script-Type" content="application/javascript"> そういう意味があったのですね。 すっきりしました。
補足
情報ありがとうございます。 すみません。かなり私の質問の仕方が悪いことに今気づきました。 質問内容を修正し、補足させて頂きたいと思います。 javascriptをhtml内に記述する時、 <script type="text/javascript> ~~処理~~ </script> だと思っています。 ただ、ボタンをクリックした時に、メッセージが表示される簡単なHTMLをonclickで作成しました。 以下ソースになります。 ★ソース <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>イベント</title> </head> <body> <form> <input type="button" value="イベント発生" onclick="alert('クリック確認。')"> </form> </body> </html> 上記ソースだけでクリックされたイベントが実行されます。(headタグにscript記述なしで動作確認。) 質問:なぜ、<script type="text/javascript">記述がなくても、onclickのイベントハンドラは動くのでしょうか? onclick等のイベントハンドラに動作を記述する際は、そういう物だと覚えておいたほうがいいのでしょうか? 参考書には、javascriptは、<script type="text/javascript">タグ内に記述するとあったのですが、 onclick(上記ソースの場合は、そのルールに反しているのに、javascript)が作動しています。 ※当然関数をonclickに使用する際は、onclick=関数(); と記述し、headの<script type="text/javascript">タグ内に関数を記述すれば動くというのは分かっているのですが・・・。 ・onclick 属性 = javascript という判断をどこかでされているのでしょうか? その結果、<script type="text/javascript">記述がなくても動く? と言うことなのでしょうか。 申し訳ありません。再度質問させて頂きたいと思います。