jquerymobile(ジェイクエリモバイル)を利用している場合は、ページ内リンク(ページ内ジャンプ、ページ内アンカー)が効かないようです。
jquerymobileでは1つのファイルで複数のページがあるように作ることができ、その機能上で「#(ハッシュ、シャープじゃないよ)」を利用するために、
ページ内アンカーするときには「#」が無効化されてしまうようです。
みなさんがいろいろ対応するためのjavaスクリプトを作成してくれているんですが、複数のページ内リンクにも対応しているスクリプトがこちらでした。
1、リンクにイベント用のクラス名をつける
リンク用のaタグに、class=”anchor”という名前をつけました。
名前付け用のaタグはいつも通りnameやidに名前をつけます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | < a href = "#aaa" class = "anchor" >アンカー1</ a >| < a href = "#bbb" class = "anchor" >アンカー2</ a >| < a href = "#ccc" class = "anchor" >アンカー3</ a > 1< br > 2< br > 3< br > 4< br > < a name = "#aaa" id = "aaa" >アンカー1はここに移動する</ a >< br / > 5< br > 6< br > 7< br > < a name = "#bbb" id = "bbb" >アンカー2はここに移動する</ a >< br / > 8< br > 9< br > 10< br > < a name = "#ccc" id = "ccc" >アンカー3はここに移動する</ a >< br / > 11< br > 12< br > 13< br > |
2、アンカー対策用スクリプトを書く
こちらのスクリプトを入れます。
1 2 3 4 5 6 7 | <script type= "text/javascript" > $(document).on( 'click' , 'a.anchor' , function (e){ e.preventDefault(); var y = $($( this ).attr( 'href' )).offset().top; $.mobile.silentScroll(y); }); </script> |
私はこれでリンクできるようになりました。
3、リンク用aタグのAjaxを無効にする
これでもダメなら、aタグのAjaxを無効にします。
リンク用のaタグに
data-ajax=”false”
を追記すれば、その部分のAjaxが無効になります。
1 | < a href = "#aaa" data-ajax = "false" >アンカー1</ a > |
これでもダメなら、どこかにタグの間違いがないか、疑ってみる・・かな・・。
ほんとjquerymobile嫌い(ノ◇≦。)
前任者がサイトに使ってからしょうがないけど・・。
HTMLはごちゃごちゃするし、
なんでこんなに普及しているんだろう。
3番目の安直な方法で問題が起きていましたのでとても助かりました。
問題とはselectの選択選択肢が多いい場合にポップアップされるのですが、その前に3番目の方法でページ内アンカーをタップしていると、ポップアップの戻り先ページ遷移がそのページ内アンカーになってしまい、結果としてポップアップが消えずにどうにまらなくなる現象が回避できました。