它根本行不通。 #found是显示匹配元素的容器。点击的所有链接都应该包含preventDefault()。
编辑:
/*Animated scroll for anchorlinks*/
var anchor = '',
pageOffset = '',
viewOffset = 30,
scrollPos = '';
$(function() {
$("a[href*='#']").each(function() {
$(this).addClass('anchorLink');
$(this).bind('click', function(e) {
e.preventDefault();
//console.log('test');
anchor = $(this).attr('href').split('#')[1];
pageOffset = $("#"+anchor).offset();
scrollPos = pageOffset.top - viewOffset;
$('html, body').animate({scrollTop:scrollPos}, '500');
})
});
});
好吧,我正在寻找包含#的所有href。所以我知道那些元素是跳转到其他元素的锚点。我不想让我的页面跳转,而是使用这个特定的#id平滑地滚动到这个元素。
当我将bind('click', ...
用于打开页面时加载的普通页面元素时,这种方法很有效。它不适用于通过ajax加载的锚点!如果我将bind
更改为live
,对于加载了ajax的元素没有任何改变 - 它们仍然不起作用。但是,始终在页面上的常规锚点也不会触发该功能。所以没有任何东西适用于live()!
答案 0 :(得分:0)
当你说“它不起作用”时你的意思是你的功能没有被调用或者你无法取消该功能吗?据我所知,你无法取消直播活动。使用jQuery 1.4,您可以使用return false取消实时事件传播。调用e.preventDefault()将不起作用。
编辑:对,所以这段代码应该在主要工作。它仍然不会做的是,它不会将'anchorLink'类添加到你的新锚点。但是,如果点击工作,那么请告诉我,我也会给你正确的代码来添加课程!
var anchor = '',
pageOffset = '',
viewOffset = 30,
scrollPos = '';
$(function() {
$("a[href*='#']").each(function() {
$(this).addClass('anchorLink');
});
$("a").live('click', function(e) {
if ($(this).attr("href").indexOf("#") > -1) {
e.preventDefault();
//console.log('test');
anchor = $(this).attr('href').split('#')[1];
pageOffset = $("#" + anchor).offset();
scrollPos = pageOffset.top - viewOffset;
$('html, body').animate({ scrollTop: scrollPos }, '500');
//nikhil: e.preventDefault() might not work, try return false here
}
});
});