0

jQueryを使用してページをdivに動的にロードしているため、デフォルトのリンクを防止しようとしていますhref=home

//initialize home page as active on load up and deactivate link
var activePage = $('a[href$="home"]');
var activePageHref = activePage.attr('href');
activePage.attr('href', '#');

$('a').click(function(e) {
    e.preventDefault();
    //set the page clicked on
    var page = $(this).attr('href');
    //check to see if there are any extras to url for php
    var pageCheck = page.split('?');   
    //sort page type
    if (pageType == null) {
        //dynamically load the page in div bodycontent
        $('#bodycontent').load(page + '.php');
    } else {
        $('#bodycontent').load(page + '.php?' + pageCheck[1]);
    }
    //pull up last disabled link for navigation
    var setOld = $('a[href$="' + activePageHref + '"]');
    setOld.attr('href', '' + activePageHref + '');
    //set the new disabled link for navigation
    activePage = page;
    //make link inactive
    $(this).attr('href', '#');
});

クリックイベント関数で発生する必要があることをさらに追加するまで、最後に return false で問題ありませんでしたが、正確には、この部分:

//pull up last disabled link for navigation
    var setOld = $('a[href$="' + activePageHref + '"]');
    setOld.attr('href', '' + activePageHref + '');
    //set the new disabled link for navigation
    activePage = page;
    //make link inactive
    $(this).attr('href', '#');

今、e.preventDefault(); は、私が起こる必要があることを行う正しい方法を理解していることから、すべてのリンクですべてが発火するのを止めています。私は立ち往生しています。デフォルトのアクションを停止し、最後に追加したエクストラで構築した関数を使用して、ナビゲーションをきれいにする必要があります。

また、追加するには、このナビゲーションの ul に関連付けられたホバー機能がありますが、問題を引き起こさないはずなので含めませんでしたが、必要に応じてここに配置できます。それが、このドキュメント準備機能の唯一の他のことです。

4

1 に答える 1

5

更新しました:

無効化されたリンクの href を最初に変更するため、属性を含むセレクターは後でそれを見つけてアクティブにすることができなくなります。これを少し違う方法で行うことをお勧めします。

クラスを使用して、「無効なリンク」機能全体をキャプチャできます。「無効」にする必要があるリンクにクラスを追加すると、ブラウザがその指定されたクラスのリンクのみをたどらないようにすることができます。

「有効なリンク」をクリックしたら、それに従ってから無効にします。次に、他のすべてのリンクを有効にします。

$('a').click(function() {
    $(this).addClass('disabledLink');
    $('a').not(this).removeClass('disabledLink');
}

次に、特定のクラスのリンクに対するデフォルト アクションを防止するドキュメント全体のイベント リスナーを設定します。

$(document).on('click', 'a.disabledLink', function(e) {
    e.preventDefault();
}

これは、あなたが望むものをそのまま達成するはずです (つまり、上記の「クリック」ハンドラー全体を置き換えることになります)。これにより、href が「#」に変更されることはありません。


それ以外の場合: リンク自体をその href とともにキャッシュするだけです

//pull up last disabled link for navigation
activePage.attr('href', '' + activePageHref + '');

//set the new disabled link for navigation
activePage = $(this);
activePageHref = $(this).attr('href');

//make link inactive
$(this).attr('href', '#');

JS エンジンを停止させる構文エラーがあります。

//pull up last disabled link for navigation
$('a[href$="' + activePageHref + '"]').attr('href', '' + activePageHref + '');

//set the new disabled link for navigation
activePage = page.attr('href');
/* THIS HERE RETURNS A STRING SO YOU CHANGE activePage to a string. */

// Should probably be:
activePageHref = page.attr('href');

//make link inactive
activePage.attr('href', '#');

このメソッドを呼び出す前に、activePage を文字列に設定します。これにはメソッドがない.attr()ため、エラーがスローされ、関数の実行が停止します。

于 2012-07-16T01:19:01.097 に答える