※ ChatGPTを利用し、要約された質問です(原文:今日は、jQueryのしめ括弧を通れません。)
jQueryの閉め括弧が影響する問題について
このQ&Aのポイント
jQueryの閉め括弧の前後で動作に違いが生じている問題について質問です。
プログラムの最後に差し込んだ確認alertが、閉め括弧の後ろにあると動作せず、前に移動すると動作するのか試しています。
また、前日までは問題なく動いていたプログラムが、今日は通らないという現象も起こっています。原因や解決方法を教えてください。
JavaScript初心者です。環境は、WIN7、ブラウザは基本、Chromeです。
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]=$("h4",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を差し込んで、ここまでは動いていることを確認しました。
ところが、}); jQueryの占め括弧の後ろにこの確認alertをカットぺすると、今度はalertが出てこず、そこに来ていないようなのです。最後の間際のサブルーチンが何か怪しいと思いひとまずコメント化で無効にしてみても同じです。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 関数名() でした。 飛んでくれない原因、何がありえるのでしょうか?