Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止哈希标记链接滚动页面?_Javascript_Jquery_Hash - Fatal编程技术网

Javascript 如何防止哈希标记链接滚动页面?

Javascript 如何防止哈希标记链接滚动页面?,javascript,jquery,hash,Javascript,Jquery,Hash,这简直让我发疯。我正在为一个项目构建一个非常定制的SliderjQuery插件。我的要求之一是,用户必须能够深入链接到特定幻灯片。因此,我所有的幻灯片都有哈希标记,导航链接也有相应的哈希标记。我的问题是,哈希标记链接的默认功能是在javascript触发的滑动动画之上启动的。也就是说,它不是滑动到幻灯片4,而是立即跳到幻灯片4,然后设置动画到幻灯片8。这是尽管使用了我能想到的每一个技巧来阻止默认功能。下面是有问题的代码片段 $(slider.nav).bind( 'click', functio

这简直让我发疯。我正在为一个项目构建一个非常定制的SliderjQuery插件。我的要求之一是,用户必须能够深入链接到特定幻灯片。因此,我所有的幻灯片都有哈希标记,导航链接也有相应的哈希标记。我的问题是,哈希标记链接的默认功能是在javascript触发的滑动动画之上启动的。也就是说,它不是滑动到幻灯片4,而是立即跳到幻灯片4,然后设置动画到幻灯片8。这是尽管使用了我能想到的每一个技巧来阻止默认功能。下面是有问题的代码片段

$(slider.nav).bind( 'click', function(event) {
    event.preventDefault();
    if( !$(this).hasClass('active') ) {
        var target = slider.nav.index( $(this) );
        slider.animate( target );
    }
});

正如您在这里看到的,我使用了event.preventDefault()。我也尝试过返回false。一点运气都没有。有什么想法吗?

不看HTML很难说。但如果这是我想象的方式,那么如果href=“#”在任何地方都不起作用,您就不需要在链接中保留href=“#”。您可以使用jQuery仅获取下一张幻灯片,也可以获取第7张幻灯片,而无需依赖href=“#”链接

相反,您可以执行以下操作:

<ul id="slideshow">
    <li id="slide_1">Slide 1</li>
    <li id="slide_2">Slide 2</li>
    <li id="slide_3">Slide 3</li> 
</ul>

<a class="slide_nav" data-index="1">1</a>
<a class="slide_nav" data-index="2">2</a>
<a class="slide_nav" data-index="3">3</a>
<a class="slide_nav" data-index="4">4</a>
$('.slide_nav').click(function() {
    var slides = $('#slideshow li'); // get all slides
    var target_id = $(this).data('id') - 1; // Get the current ID and then subtract 1 (index starts at 0)
    slider.animate(slides[target_id]);
});
无论如何,这更像是一个伪示例,我不确定它是否能正常工作,但代码应该有希望为您指明一个避免使用href=“#”的方向,从而避免您现在遇到的问题


祝你好运。

哦,天哪。我真的很抱歉。我浪费了每个人的时间

显然,另一位在该网站上工作的开发人员在其他地方添加了一些javascript,大致达到了

if( window.location.hash ) {
    window.location = window.location.hash;
}

不知道他们为什么要加上这样的东西。对不起

您还可以将带有
#
的真实链接转换为
.ready()
上的
数据索引或
rel
属性,然后将
href
归零。