私は、このコードをajax経由で各ページを読み込んでフォールバックする主要サイトのナビゲーションに使用しています。jQuery ajax navigation with ajax navigation
$(function() {
var newHash = '',
$contentWrap = $("#content-wrap");
$("nav").on("click", "a", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
newHash = window.location.hash.substring(1);
$contentWrap.load(newHash + " #content");
});
$(window).trigger('hashchange');
});
これが正常に動作しますが、私はまた、#コンテンツラップ内でのナビゲーションのためにいくつかのより多くのボタンでロードしていますabout.html例えば別のページからコンテンツをロードするとき。
so#content-wrapにはデータボックスとナビゲーション用のボタンが追加されました。新しいナビゲーションをクリックすると、データボックスに新しいデータを読み込む必要があります。
まず、私はちょうど上記のスクリプトをコピーしてみましたが、新しいアンカーでは矛盾します。
私は何らかのif文を必要としますが、if(function!== undefined)のようなものを調べましたが、何をすべきか分かりません。
私は自分自身を説明しているか分かりませんが、私はそれを説明するのが混乱していますが、基本的には上記のコードを基本的に同じコードを以下のように組み合わせています。
$(function() {
var newHash = '',
$contentWrap = $("#content-wrap"),
$aboutWrap = $("#a-wrap");
$("#content-wrap").on("click", "a", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
newHash = window.location.hash.substring(1);
$aboutWrap.load(newHash + " #a-content");
});
$(window).trigger('hashchange');
});
更新:種類のビットを動作しますが、
$(function() {
var newHash = '',
$nav = $("nav a"),
$boxBtn = '',
$aboutWrap = '',
$contentWrap = $("#content-wrap");
$("nav").on("click", "a", function() {
$(this).addClass("nav-click");
window.location.hash = $(this).attr("href");
return false;
});
$contentWrap.on("click", "a", function() {
$(this).addClass("btn-click");
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
var $aboutWrap = $("#a-wrap"),
$boxBtn = $("div.btn a");
newHash = window.location.hash.substring(1);
if ($nav.hasClass("nav-click")){
$contentWrap.load(newHash + " #content");
$nav.removeClass("nav-click");
};
if ($boxBtn.hasClass("btn-click")){
$aboutWrap.load(newHash + " #a-content");
$boxBtn.removeClass("btn-click");
};
});
$(window).trigger('hashchange');
}); /*/end*/
こんにちは、返信ありがとうございます。私はそれが時々問題になることは知っていますが、私はそれがここに当てはまるとは思わない。私は '$(ウィンドウ).on(' hashchange '、function(){'が2回呼び出されていることが問題だと思いますが、これを防ぐためにifステートメントを配置する方法はわかりません。 – thom
手動でハッシュを変更することもできますが、リンクを介してハッシュを変更したときに変数を設定し、その変数を関数内でチェックすることもできます。 clickeventハンドラ – Opi
こんにちは、私はそのアイデアで遊んでいましたが、私はそれがうまく動作する(上に掲載されました)が、バックのボタンは動作しません。私は本当に時間がないので、毎回メインコンテンツ全体をロードするだけでなく、非常に非効率的であれば、フォールバックのために少しシンプルになります。 – thom