【问题标题】:Prevent page jump on tab click JS防止页面跳转标签点击JS
【发布时间】:2015-10-15 17:40:44
【问题描述】:

我有几个不同高度的标签。点击tab链接时如何防止页面跳转到容器顶部?

JSFiddle

http://jsfiddle.net/q1tdsar1/1/ 重现问题的步骤:单击选项卡 3,向下滚动,就像阅读选项卡 3 的内容一样,然后单击选项卡 1。Boom > Page Jump!

这是我的 JS:

$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');

$('#tabs ul li a').click(function(){
    $('#tabs ul li').removeClass('active');
    $(this).parent().addClass('active');
    var currentTab = $(this).attr('href');
    $('#tabs div.tab').hide();
    $(currentTab).show();
    return false;
});

这是 HTML

<div id="tabs">
    <ul class="nav">
      <li><a href="#tab-1">Tab 1</a></li>
      <li><a href="#tab-2">Tab 2</a></li>
      <li><a href="#tab-3">Tab 3</a></li>
    </ul>
    <div id="tab-1" class="tab">Some content</div>
    <div id="tab-2" class="tab">Some longer content</div>
    <div id="tab-3" class="tab">Some even longer content</div>
</div>

这是 CSS:

#tabs ul.nav {
    float: left;
    width: 500px;
}
#tabs li {
    margin-left: 8px;
    list-style: none;
}
* html #tabs li {
    display: inline;
}
#tabs li,
#tabs li a {
    float: left;
}
#tabs ul li.active {
    border-top:2px #FFFF66 solid;
    background: #FFFFCC;
}
#tabs ul li.active a {
    color: #333333;
}
#tabs div.tab {
    background: #FFFFCC;
    clear: both;
    padding: 15px;
}
#tabs ul li a {
    text-decoration: none;
    padding: 8px;
    color: #000;
    font-weight: bold;
}

【问题讨论】:

  • 添加event.preventDefault();
  • 能否请您提供带有链接的标签页的HTML?
  • @Ales 查看更新的问题
  • 你为什么不试试jquery ui tabs??
  • @IndrasinhBihola 它在 Kb 中是巨大的,这就是为什么?!如果可以的话,我想避免加载其他大型库。

标签: javascript jquery css


【解决方案1】:

到目前为止,您可能需要为所有选项卡使用相同的高度。因此,脚本可能会有所帮助,因为这不是发生的页面跳转,因为您已经用 return false 代替了 event.preventDefault();

TabDivHeight = 0;
$('#tabs div.tab').each(function () {
  $(this).show();
  if ($(this).height() > TabDivHeight)
    TabDivHeight = $(this).height();
  $(this).hide();
});
$('#tabs div.tab').height(TabDivHeight);

小提琴:http://jsfiddle.net/342fsu8o/

或者,如果您更喜欢 CSS 版本,我会说,选择这个:

#tabs div.tab {
  background: #FFFFCC;
  clear: both;
  padding: 15px;
  max-height: 200px;
  overflow: auto;
}

小提琴:http://jsfiddle.net/jv3bmtof/

或者如果你喜欢平滑过渡,你可以使用slideUp()slideDown()

$('#tabs ul li a').click(function () {
    $('#tabs ul li').removeClass('active');
    $(this).parent().addClass('active');
    var currentTab = $(this).attr('href');
    $('#tabs div.tab').slideUp();
    $(currentTab).slideDown();
    return false;
});

小提琴:http://jsfiddle.net/tdxyLvLs/

【讨论】:

  • 这似乎只是隐藏了我的内容,点击标签不起作用,因为它不会显示内容
  • @egr103 创建一个小提琴。必须在执行$('#tabs div.tab').hide();之前插入此脚本。
  • @egr103 页面跳转到底是什么意思?
  • @egr103 是的,我明白了。这就是我要说的问题。这是因为尺寸不规则。
  • @egr103 我在小提琴中添加了相同的代码。立即查看:jsfiddle.net/342fsu8o
猜你喜欢
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
相关资源
最近更新 更多