2012-02-24 56 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; 
    }); 
});​​​​​ 

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