2010-10-29 108 views
1

我想知道是否有一種方法來禁用當前類使用jQuery重新加載頁面?停止當前頁面重新加載時

例如,當您處於「關於」頁面時,「關於」頁面的當前狀態不允許用戶在重新點擊鏈接時重新加載頁面。所以,如果你有某種動畫,它不會重新開始。

如果有人可以借我一把手,我將不勝感激。

謝謝

這是我到目前爲止有:

$(function() { 
    $page = jQuery.url.attr("file"); 
    if (!$page) { 
     $page = 'index.html'; 
    } 
    $('ul.navigation li a').each(function() { 
     var $href = $(this).attr('href'); 
     if (($href == $page) || ($href == '')) { 
      $(this).addClass('current'); 
     } else { 
      $(this).removeClass('current'); 
     } 
    }); 
}); 
+0

請在提問時將代碼放入代碼塊中。 – 2010-10-29 15:49:15

+0

您當然可以阻止鏈接可用,但是您無法阻止用戶刷新頁面或重新輸入URL以重新加載頁面。你可能想要考慮你想要完成的事情。 – Ender 2010-10-29 15:52:12

回答

0

你必須抓住click事件,並取消它。見我下面我的意見之間增加的部分:

$(function(){ 
$page = jQuery.url.attr("file"); 
if(!$page) { 
    $page = 'index.html'; 
} 
$('ul.navigation li a').each(function(){ 
    var $href = $(this).attr('href'); 
    if (($href == $page) || ($href == '')) { 
    $(this).addClass('current'); 

    /** ADDED BELOW **/ 
    $(this).click(function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
    }); 
    /** ADDED ABOVE **/ 

    } else { 
    $(this).removeClass('current'); 
    } 
}); 
}); 
+0

請注意,「event.preventDefault()」會停止重新加載頁面的點擊,而「event.stopPropagation()」會阻止該事件冒泡到其他事件處理程序。 – 2010-10-29 15:52:39

+0

另外,作爲一般的良好實踐,除非有充分的理由(例如,如果指定的變量是jQuery擴展對象),否則您可能不應將變量命名爲美元符號。上面命名爲「$ page」和「$ href」的純字符串可能更好地稱爲「page」和「href」。 – 2010-10-29 15:53:49

+0

再次感謝您的幫助,下次我有一個問題,我會確保將代碼放入代碼塊並命名我的變量。 – Kmack 2010-10-29 16:00:01

0

你可以通過更換禁用鏈接$(本).addClass(「當前」)與:

$(this).addClass('current').find("a").click(function() { 
    return false;      
}) 

這爲我工作過去但剛剛看到本的更新,並有興趣,如果我的和他的答案都將工作,或者我的是否有缺陷?是event.preventDefault(); 和event.stopPropagation()更好的選擇?

+0

作爲一種風格問題,人們傾向於選擇preventDefault而不是返回false。由於陳舊的原因返回虛假作品,但這實際上是一種黑客行爲。看到這個SO帖子的討論:http://stackoverflow.com/questions/1357118/javascript-event-preventdefault-vs-return-false – 2010-10-29 16:08:51

0

如何動態地爲當前頁面的鏈接添加散列?在網址中點擊帶有散列的鏈接不會重新加載頁面。 (DOM元素具有一個名爲「hash」的屬性,可以用於此)。