- ベストアンサー
jQueryの閉め括弧が影響する問題について
- jQueryの閉め括弧の前後で動作に違いが生じている問題について質問です。
- プログラムの最後に差し込んだ確認alertが、閉め括弧の後ろにあると動作せず、前に移動すると動作するのか試しています。
- また、前日までは問題なく動いていたプログラムが、今日は通らないという現象も起こっています。原因や解決方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
再回答です。 ちょっと質問の中身を把握できていませんでした、すみません。 一部ソースを手直ししたものをはります。 質問にありますalertが出なくなる、 「});」の位置を教えていただけると答えられるかもしれません。 ========================================= <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script> jQuery.event.add(window,"load",function(){ function menudo() { var menus=$("h4").length; var m = new Array(menus); for ( var i=0 ; i<menus; i++){ var stoc="#t"+i; var stoc2="tt"+i; m[i]=$(stoc).html(); m[i]="<span class=\'formenu\' id=\'"+stoc2+"\'>"+m[i]+"<\/span>"; $(m[i]).appendTo("#topmenu"); } $('.formenu').click(function(){ memoa=$(this).attr('id'); memoa=memoa.substring(1,4); // selectPage('sub1'); alert("ちゃんと来てる場合は"+memoa); }); alert("clickしないとmemoa取得できませんですはい。"); } menudo(); }); </script> </head> <body> <div id="topmenu">topmenu</div> <h4 id="t0">h4のテキスト01</h4> <h4 id="t1">h4のテキスト02</h4> </body> </html> =========================================
その他の回答 (3)
- fujillin
- ベストアンサー率61% (1594/2576)
A No3です。 意味が通じていなかったようなので… >あちこちに試しに挿入したり抜いたりを繰り返しているのです。 意図はわかりますが、ベースがよくないという意味の回答でした。 >alert("ちゃんと来てる場合は"+memoa); ではなく、 alert("ちゃんと来てる場合"); とか、 alert("OK"); などなら、カット&ペーストでも良いのではという意味です。
お礼
これまでのやり取りでようやく、自分の勘違いがわかってきました。alert(memoa)はonclick functionの中の変数を使っているため、この関数の外では「なんのこっちゃ」になって反応しないから、変数無しの alertで試すべきだというご指摘ですよね。 }); の次が、クリック後の動作であるかのような誤解があったのです。No2の方のサンプルでクリックを待つまでもなく「できませんですはい」が早々に表示されたことで、動きが理解できた次第です。 }); 後に書くのとクリックをトリガーに次に処理に行くのと関係ないのはわかったのですが、alert(ちゃんと来てる場合は)の場所に定義済み関数を書いても実行できない悩みが残ったままです。No2の方の回答への返答内容とかぶります。最初は、クリックでfunction~ }); を抜け、次の } を抜ける意図が出来ていないように見え、表題のような尋ね方になってます。最初から、クリックをトリガーに次の関数を実行すべく、ここを『脱したい』のが質問の主旨です。どうしたら成功するでしょうか?気にかけてくださりありがとうございます。
補足
お騒がせして申し訳ありませんでした。 alert("ちゃんと来てる")のところで呼び出す関数側に深刻なエラーがあり、実行が拒否されていたのがわかりました。 プログラムはまだ誤動作はあるものの、修正後、そこへ飛んでくれるようになり、問題の主旨としては、一応、解決しました。 ここでの指摘がなかったら、クリック設定をした時の動作とか、よくわからないままだったと思います。勉強させてもらいました。baloon23さん、fujillinさん、ありがとうございました。赤面して撤収したいと思います。
- fujillin
- ベストアンサー率61% (1594/2576)
よくわかってませんが・・・ >alertをカットぺすると、~~ カットアンドペーストでなく alert("OK"); などとすれば、表示されませんか? とはいっても、実行されるタイミングは移動前後で異なると思いますが…
お礼
返答ありがとうございます。 alertのカットペーストは、どこまでプログラムが動いているか=間違いなく記述できているかを確認するために、あちこちに試しに挿入したり抜いたりを繰り返しているのです。
- balloon23
- ベストアンサー率69% (16/23)
詳しい方では無いのですが一応回答させていただきます。 気になった箇所をあげますので良ければ確認してみてください。 ・全角スペースが混じっている ・jqueryが読み込まれているか ・jqueryが読み込まれた後で動作しているか プログラム全体を jQuery.event.add(window,"load",function(){ }); でくくってみてください。
お礼
申し訳ありませんが、解決にいたりません。 <h4>idと内容読み込みからappendTo書き込みから、jQuery動作うまくいった、と喜んでいた矢先に、括弧だけで行き詰まってしまうのですからたまりません。いったん削除して全角に触らず打ち直しても、症状変わらず。何とかしたいです。早々に参考意見ありがとうございます。
お礼
何度も、のやり取りになってしまい、またサンプルプログラムまで書いていただき、恐縮です。 問題の }); は、まさに最後の2つのalertに挟まれた部分のことです。 よく考えたら、「取得できませんですはい。」を加えていただいた部分はclick functionの括りの外なわけで、クリックを待つまでもなく動いてしまうんですね。h4項目を書き出した直後何もせずに「取得できませんですはい。」から表示され、クリックで「ちゃんと来てる場合は」が表示される動作は納得いきました。また、.formenuをクリックした時の動作は設定できても、それがmenudoの終了、元ルーチンの復帰だと思ってたのが、思い違いだったようで、この2点、気づけてよかったです。 サンプルプログラムを単体でそのままメモ帳へ拝借し、 next() { alert("脱出成功"); alert(memoa); } を</script>の前に書き加えて、alert「ちゃんと来てる場合は」の直後の行にnext();を足して実験してみました。クリックを次の関数実行の合図にするには click(function の括りの中に置く必要があると思って。「ちゃんと」に続けてあと2回アラートしてくれればと思ったのですが、成功してくれません。menudo()を出て次の関数命令に行くには、どう直せばいいのかが悩みです。何とかなるでしょうか?ちなみに、関数コールではなく、代わりに直接alertを3回続けると、きちんと動作します。(すごく当たり前。)同じことが、関数にすると何かいけないんでしょうか?クリックを合図に次の関数へ移行できるようにこぎつけたいです。なんだか、網は絞れてとどめがさせない感じでもどかしいです。 ちなみにこのh4の項目を表示してクリックでidを渡す動作、jQueryでシンプルに失敗知らずに実現する書き方があるような気がしてます。
補足
すみません。「お礼」として書いた分の後半の実験、 next() が超恥ずかしいイージーミスでした。正しくは function next() で、これなら問題なく動きます。 ただ、本当に作っているプログラムでは、このように定義した関数に飛んでくれません。もちろん、同じ原因ではと思ったんですが、ちゃんと function 関数名() でした。 飛んでくれない原因、何がありえるのでしょうか?