- ベストアンサー
Ajaxボタンが起動しない
- ボタンを押しても関数が呼び出されない問題について解決方法を教えてください。
- ソースコードを確認したところ、Ajaxボタンの動作に問題があるようです。
- テスト1回目の実行時にAjaxボタンが正しく起動しない問題が発生しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
たびたび失礼します。#1、#3です。 debug()の中で使用している「str」という変数がどこにも定義されていないためにエラーになってるはずです。 >function debug(){ >document.getElementById("debug").innerHTML += "</br>" + str; >} これ、「function debug(str)」だと思うんですが。 関数定義時の括弧内に書かれた変数は引数といって、呼び出し時に何らかの変数を受け取った際にその変数に当てはめます。 例では「debug(globalVar)」と呼んでいますから、globalVarが関数に渡され、strに代入された状態になるわけです。 くりかえしになりますが、JavaScriptはブラウザ内で動くプログラムなので、何かあればたいていのことはブラウザが教えてくれます。 もしWindowsXPだからIE9以上が使えないということなら、FirefoxやChromeのようにデバッグがしやすいブラウザを導入したほうがいいです。
その他の回答 (3)
- play_with_you
- ベストアンサー率37% (112/301)
こんにちは。#1です。 なるほど。同じ本から引っ張ったんですね。 さて。 ページの画像は確認しましたが、そのコードはは本当にそれだけなんですか? 少なくともHTMLの本体が続くので、記述自体が完全に終わりであることはないと思います。その下にdebugClear()とdebug()の定義の記述は無いんですか? 「Ajax自体に宣言が」というのはなにやらおかしな言い回しですが、AJAXというのは単にJavaScriptを利用したひとつの技術の名前ですから、宣言云々は無関係です。 また、どれ故か知りませんがエラーが出ないということはありません。なぜなら関数未定義のエラーが間違いなく発生するからです。使用しているブラウザが何か知りませんがIEの8以下ならHTMLやJavaScriptの確認には不向きですのでやめるべきです。 最後に、なぜそれが本題になってしまったのか分からないんですが、関数の定義は function xxxxx(){ } です。 または変数に入れるなら var xxxxx = function(){ } です。「関数を変数に入れる」事については、よく分からなかったら今のうちは気にしなくていいと思います。 なんだか私の回答で却って混乱させてしまっている気もしますが、繰り返しておくと、 function debugClear(){ } または var debugClear = functio(){ } という記述が無い限り、「debugClear()」という関数は存在しないので動きません。 その本は持ってないので推測ですが、もっと手前のページで、それを定義して使うセクションがあるのでは……?
お礼
本を読み漁ったら、 function debug(){ document.getElementById("debug").innerHTML += "</br>" + str; } function debugClear(){ document.getElementById("debug").innerHTML += ""; } というソースがありました。 これを用いて以下のソースを作ったのですがやっぱり上手くいきません。 何度もご迷惑をおかけしますが回答お願いします。 <html> <head><title>情報ネットワーク-テスト1</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript"> var globalVar = "テスト"; function varTest(){ debugClear(); debug(globalVar); } function debug(){ document.getElementById("debug").innerHTML += "</br>" + str; } function debugClear(){ document.getElementById("debug").innerHTML += ""; } </script> </head> <body> <h1>テスト1回目</h1> <form> <input type="button" value="テスト開始" onclick="varTest();"/><br/> </form> <div id="debug">開始ボタンを押すと問題が出現します</div> </body> </html>
- play_with_you
- ベストアンサー率37% (112/301)
http://okwave.jp/qa/q7424153.html これのコピペ? ブラウザのエラーメッセージ読めば分かるんと思うんですけどね。 「呼び出されない」んじゃなくてdebugClear()もdebug()も定義されてないから動かないだけです。
お礼
回答ありがとうございます。コピペですがサイトからでなく ”10日で覚えるAjax入門教室”のサンプルソースでまねしたんですが...機能しなくて困っていたのです。しかし、本によるとAjax自体に宣言がなくても機能すると書いてあり、関数宣言するとほかの人が見たときにわかりやすいということが書いてありました。それ故、ブラウザーのエラーメッセージもでてきません。 本題ですが、関数を定義するとしたらvarで定義すればいいのでしょうか?
補足
質問に画像を加えました。この画像のソースをまねてソースを書きました。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 debugClearとdebugという関数は作ってありますか? 上記二つを定義すれば呼ばれていることを確認することができます。 もっと簡単に呼ばれているか確認するには function varTest() { alert ( 'varTest()よばれた'); } として確認してください。 *細かいことを言うとこの質問にAjaxは関わっていません。
お礼
回答ありがとうございます。質問に画像を加えました。この画像のサンプルソースを真似てソースを書きました。このとおり、関数を宣言してません。なので、よくわからないのです。
お礼
回答ありがとうございました。上手く動作しました。とてもわかりやすかったです。