【问题标题】:Page scrolls down when clicking on a link单击链接时页面向下滚动
【发布时间】:2013-05-02 01:59:43
【问题描述】:

点击我的链接时页面向下滚动时出现问题。我很确定这是因为浏览器认为链接应该是页面上某个区域的锚点。

我正在使用这个 jquery 代码来隐藏主 div 并显示与单击的链接相对应的 div。主信息 div 和主 info2 div 在 css 中是相同的。唯一不同的是里面的文字。

$(document).ready(function(){
$("#home").click(function(){
 $("#main_info2").hide();
 $("#main_info").show();
});
$("#info").click(function(){
 $("#main_info").hide();
 $("#main_info2").show();
});
$("#gyms").click(function(){
 $("#main_info").hide();
 $("#main_info2").show();
 });
$("#contact").click(function(){
 $("#main_info").hide();
 $("#main_info2").show();
});
});

这是我的导航列表:

<ul>
  <li><a href="#home" id="home"><img src="main home page/purhome.jpg"></a></li>
  <li><a href="#info" id="info"><img src="main home page/purinfo.jpg"></a></li>
  <li><a href="#gyms" id="gyms"><img src="main home page/purgyms.jpg"></a></li>
  <li><a href="#contact" id="contact"><img src="main home page/purcontact.jpg"></a></li>

当我单击信息链接时,例如,主页 div 隐藏并显示信息 div,但由于href="#info",页面向下滚动。如果我将其更改为href="#",它可以在不滚动的情况下正常工作,但是,如果仅使用"#",浏览器 url 不会反映显示的 div。

例如,我希望浏览器显示http://google/index.php#info 而不仅仅是http://google/index.php#

有什么想法吗?

【问题讨论】:

  • 我很困惑。你到底在用href做什么?您是说您不希望它在单击时向下滚动到该 div 吗?

标签: javascript jquery html url anchor


【解决方案1】:

这是你的问题:

在这一行:

<a href="#home" id="home"><img src="main home page/purhome.jpg"></a>

您正在设置一个链接,该链接确实滚动到页面上的某个区域,在本例中为它自己。

href="#home" 表示:点击此链接时,使idhome 的元素可见。

实际点击的链接,有idhome

因此它确保自身内部的任何内容都是可见的,浏览器通常向下滚动页面到具有指定id 的特定元素。这解释了这种行为。

在你的情况下,你可以去掉链接上的 href 属性,这应该可以解决它。

编辑

获得所需行为的最简单方法是将您的 id 更改为如下内容:

HTML

<ul>
  <li><a href="#home" id="home-link"><img src="main home page/purhome.jpg"></a></li>
  ...
</ul>

JavaScript

$("#home-link").click(function() {
  $("#main_info2").hide();
  $("#main_info").show();
});
...

您甚至可以将main_infoid 更改为home,以确保在单击链接后main_info(或home)可见,如果这是您所追求的那种行为。

编辑 2 - 读取哈希解决方案

HTML

<ul>
  <li><a href="#home"><img src="main home page/purhome.jpg"></a></li>
  ...
</ul>
<div id="home">This is the tab content for the "home" tab.</div> 

链接上不需要id,但在&lt;div&gt; 或用于创建标签内容的任何元素上设置一个。现在,链接上的href 属性将确保与下面的 JavaScript 结合发生正确的事情,该 JavaScript 会捕获点击并根据哈希值显示正确的选项卡。

JavaScript

$("a").click(function() {
  // Hide all tab content elements.
  $('some-selector-which-selects-all-tab-content-elements').hide(); 
  // Show only the tab content element with an id equal to the hash value.
  $(window.location.hash).show();   
});    

【讨论】:

  • 我现在遇到的一个问题是我点击主页上的信息链接。主 div 消失,现在第二个 div 显示。网址显示 localhost/index.php#info。但是,当我刷新时,页面会返回显示主 div 但保持相同的 url。所以你有主 div 但 url 说你在信息页面上
  • 是的,您可以通过使用 JavaScript 读取散列(# 后面的位)然后在页面加载后使用 jQuery 触发点击带有相关 id 的链接来解决此问题。有关一些示例代码,请参阅this answer。在您的情况下,它应该类似于$('#' + window.location.hash + '-link').click();。这是一个更好的方法,这样你就不需要你当前的 jQuery 代码了。
  • 只需单击链接,然后捕获哈希并根据该哈希值使用 jQuery 打开右侧的div
  • 这样的? 'function getHash() { var hash = window.location.hash;返回 hash.substring(1); // 删除 # }'
  • 然后使用这个:$('#' + window.location.hash + '-link').click();除了添加我的点击功能来指定打开哪个div?
【解决方案2】:

由于您将点击事件处理程序分配给 a 标签,因此无需在代码中使用“href”属性:

<a id="home">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多