2012-07-16 53 views
0

我試圖阻止默認的鏈接,因爲我動態加載到頁面使用jQuery的div,併爲每個href的只是名稱的頁面之前(如href=home,並固定在加載代碼home.php下面)。爲什麼不能防止默認鏈接?

//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', '#'); 
}); 

這是確定的,並在最後返回假的,直到我說更多的事情,我需要在點擊事件函數發生,但準確的說,這部分:

//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', '#'); 

現在電子。 preventDefault();這是從我所理解的正確的方式做我需要發生的事情,阻止整個事情發生在任何鏈接上。我卡住了。我只需要停止默認動作,並使用我已經添加的功能來創建導航。

而且添加,我有一個懸停功能依賴於這種導航的UL認證,但不包括,因爲它不應該造成一個問題,但我可以把它放在這裏,如果需要的。這是該文檔就緒功能中唯一的其他功能。

+0

你在控制檯上看到任何錯誤? – undefined 2012-07-16 01:13:19

+0

我不太確定如何做到這一點。 – Grant 2012-07-16 01:17:07

+1

如果您使用的是Firefox,則可以安裝顯示錯誤的螢火蟲。 – undefined 2012-07-16 01:18:15

回答

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()因此它會引發錯誤並停止執行該函數。

+0

如果你檢查你的控制檯,你應該得到類似於「TypeError:object has no method'attr'」(至少在Chrome中)的東西 – nbrooks 2012-07-16 01:21:56

+0

我只是想出瞭如何在Firefox中。我沒有太多用處。我確實有一個問題沒有解決。由於頁面加載到「主頁」,因此我默認主頁鏈接處於非活動狀態。我需要將它改回活動狀態,並試圖用'var activePage = $('a [href $ =「home」]'); var activePageHref = activePage.attr('href'); var setOld = $('a [href $ =''+ activePageHref +'「]'); setOld.attr('href',''+ activePageHref +'');'也更新了我的腳本以反映我現在擁有的。 – Grant 2012-07-16 01:24:48

+0

@grant我更新了我的答案。看看,讓我知道,如果這看起來可能是你需要的。 – nbrooks 2012-07-16 01:35:48