2012-02-24 55 views
1

我有三種形式的簡單代碼,一種不工作,另外兩種形式工作,但我想了解是什麼導致兩種方法工作jQuery hashchange問​​題

請看看簡單的代碼。 http://jsfiddle.net/NjWAz/(它不能正常滑動)。

雖然如果只有div ids被附加,然後它正常滑動。 http://jsfiddle.net/NjWAz/2/ (這是我的第一個問題是什麼原因導致它的實際工作?只是改變IDS如何使它工作?)

而在另一種形式。 http://jsfiddle.net/NjWAz/1/ (它的工作原理也一樣,所以這裏是我的第二個問題是通過防止默認行爲,它是如何做的工作..什麼是默認的行爲,是打破其在http://jsfiddle.net/NjWAz/工作)

回答

1

它不工作的原因第一個例子是因爲你沒有阻止鏈接的默認行爲。當你創建一個哈希標籤的鏈接(例如#two)的鏈接在頁面由於在第一個例子,你有指向#two和你一個鏈接移到元素具有相同ID參數(例如<div id="two">

有一個元素具有相同的ID,<div id="two">,它跳轉到元素,然後繼續執行您的jQuery動畫,導致它看起來好像它正在移動到#three

第二個示例中,href屬性值與任何HTML元素都不匹配,所以它工作正常。

在第三個示例中,您正在阻止鏈接的默認行爲,因此它可以工作。

您可以使用第三個示例中的方法來防止默認行爲,或者您可以將return false;在點擊事件的結束:

$(function() { 
    $(".clickIt a").click(function() { 
     var linked = $(this).attr("href"); 
     var pos = $(linked).position(); 

     $(".clickSlider").stop().animate({left: -pos.left,}, 500); 

     return false; 
    }); 
});​​​​​ 

希望我的解釋是有道理的:)