jQueryを使ってウィザード形式の画面を作ろうとしております。
「次へ」のリンクは画面に一つだけ設置し、動的にリンク先のハッシュを変えるようにし、
画面は、リンク先のIDボックスを表示するという仕組みです。
しかし、以下のコードで実行すると、画面は指定したものが表示されますが、アドレスには一つ先の飛び先が表示されます。
この現象が、どういうことかわかりませんので、どなたか教えて頂けないでしょうか?
<!DOCTYPE html>
<html><head><meta charset="utf-8" /><script src="http://code.jquery.com/jquery-1.9.0.min.js"></sc …
<script>
$(function(){
$('#next').click(function(){
$('.page').hide();
$($(this).attr('href')).show();
$(this).attr('href','#step2');
});
});
</script>
</head>
<body>
<a id="next" href="#step1">次へ</a>
<div id="top" class="page">top</div>
<div id="step1" class="page" style="display:none;">step1</div>
<div id="step2" class="page" style="display:none;">step2</div>
</body>
</html>
No.1
- 回答日時:
推測での回答ですが…
クリックした時に以下の処理が起こっていると推測します。
1.リンク要素をユーザがクリック
2.スクリプトが表示処理とhref属性変更処理を行なう
3.ブラウザ側がクリック時の通常処理を行なう
(2で変えられた#step2を表示し、アドレスバーにそのURIを表示)
3の処理の際に、#step2の要素は非表示設定になっているため、結果的に、アドレスバーの表示だけが変わることになっているのではないkと推測します。
お考えのようになさりたいのであれば、
2.の処理ではhrefの変更を行なわず
3.の処理をブラウザに行なわせた後で
2.の後半の処理(または2全体の処理)を行なう
ように順序を変えればよろしいかと思います。
具体的にはsetTimeoutなどを利用して、一旦ブラウザに処理を渡してから2の処理を行なうようにすればよろしいのではないでしょうか。
ご回答ありがとうございます。
お礼遅くなりまして申し訳ございません。
JavaScriptのデバッグツールで、show()の箇所でブレークポイントを設定し一時止めておくと、希望の動きになることが確認できていたので、時間で処理内容が変わることに疑問がありました。
その為、setTimeoutも考えましたが、原因不明で不安でしたので質問させて頂きました。
結局、hashを使わず、cookieで画面番号を記憶するように変えて希望の動きにするようにしました。
No.2の方も別の方法をご回答頂いているので、ケースバイケースで対応することにします。
No.2ベストアンサー
- 回答日時:
ご希望の動作を実現するには CSS3 の :target や hashchange を使うのがスマートな気がします。
# 未対応ブラウザも動作対象とするならJavaScriptで工夫する必要があります。
http://jsfiddle.net/wxjzh/show/4/
> アドレスには一つ先の飛び先が表示されます。
原因は #1 の方が指摘されているようにページ遷移する前にhref属性値が書き換えられているためですね。
http://jsfiddle.net/wxjzh/show/1/
ご回答ありがとうございます。
お礼遅くなりまして申し訳ございません。
サンプルまで付けて頂いてありがとうございます…が、両方同じコードなようです。
No.1のお礼でも書きましたが、今回は、hashを使わずcookieで処理をしてしまいましたが、別プロジェクトでhashChangeを利用してみました。
私のコードがおかしいのか、不安定な動きになることがあり今は断念。pushStateを導入するか否かというところです。
CSS3の:targetは始めて知りました。
便利ですが、できれば戻る・進むボタン対応も考慮したいので、hashChangeかpushStateのどちらかなというところです。
質問した時期のプロジェクトはiPadの対応のみで、かつWeb Clipで起動することを条件としていれば:targetで良かったかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ftp 同時複数接続の負荷テスト...
-
アコーディオンメニューをアン...
-
tryの終了
-
switch文の中に、throws new Ex...
-
スレッド
-
ファイルの排他
-
Ajaxの実行速度と読み方について
-
onBlurとonFocusの処理順序につ...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
-
string formatについて
-
クラス間でのデータ参照
-
変数の参照でエラーが出てしま...
-
VBA 同じ名前のオブジェクトを...
-
String型の日付(2005/11/25)の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Javaプログラムからポップアッ...
-
Tomcatのスレッドを破棄する方法
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
素数判定を再帰処理で
-
PHPでDB処理中にプログレスバー...
-
Javaアプリケーション実行の返...
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
switch文の中に、throws new Ex...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
JDBCでテーブルUPDATE後の再検...
-
SwingUtilities.invokeLater(ne...
おすすめ情報