我正在使用
JQuery UI在我的应用程序中制作标签.我需要可链接的标签(直接链接打开页面并选择正确的选项卡).这是通过使用哈希标签/
fragmented identifier完成的.但是当选项卡上方的内容和标签内的内容非常长时,我有一个问题.
当单击选项卡时,页面将向下滚动到标签的开头.这不是我想要的.
我使用Jquery 1.7.1和Jquery UI 1.8.16.
JavaScript / Jquery代码是一个标准的Jquery UI选项卡,除了事件“tabsshow”之外.这是建议在Changing location.hash with jquery ui tabs(Stackoverflow问题)和JQuery UI Tabs: Updating URL with hash while clicking the tab(博客 – 技术日记由罗宾)
$(document).ready(function() { $("#tabs").tabs(); /** * Add hash to URL of the current page * * http://chwang.blogspot.com/2010/02/jquery-ui-tabs-updating-url-with-hash.html * https://stackoverflow.com/questions/570276/changing-location-hash-with-jquery-ui-tabs */ $("#tabs").bind('tabsshow',function(event,ui) { window.location.hash = ui.tab.hash; }); });
以下HTML可用于测试行为
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js" type="text/javascript"></script> <div style="height: 400px;">Some other content</div> <div id="tabs" class="ui-tabs ui-widget ui-widget-content ui-corner-all"> <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"> <li class="ui-state-default ui-corner-top"><a href="#tab_1"><span>Tab 1</span></a></li> <li class="ui-state-default ui-corner-top"><a href="#tab_100"><span>Tab 100</span></a></li> <li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#tab_1000"><span>Tab 1000</span></a></li> </ul> <div id="tab_1" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"> <table style="height: 1000px"><tr><td>Hello. This is tab 1</td></tr></table> </div> <div id="tab_100" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"> <table style="height: 1000px"><tr><td>Hello. This is tab 100.</td></tr></table> </div> <div id="tab_1000" class="ui-tabs-panel ui-widget-content ui-corner-bottom"><h2>Heading</h2> <table style="height: 1000px"><tr><td>Hello. This is tab 1000.</td></tr></table> </div> </div>
当打开带有以下URL的页面时,应该打开标签1,不要向下滚动到标签开始的位置.点击其中一个选项卡也是一样.
file.html#tab_1
解决方法
这可能不是最好的方法,但如果在创建选项卡后重命名所有的ID,则添加原始ID的散列将不会滚动页面.我使用这种方法,因为即使javascript被禁用,哈希将使用户正确的ID.这是
a demo的代码如下:
$("#tabs").tabs({ create: function(event,ui) { // get tab plugin data var tabs = $('#tabs').data('tabs'),// tabs.anchors contains all of the tab anchors links = tabs.anchors; // tabs.panels contains each tab tabs.panels.each(function(i){ // just adding a "mod_" prefix to every ID/hash this.id = 'mod_' + this.id; links[i].hash = '#' + this.id; }); } }); /** * Add hash to URL of the current page * * http://chwang.blogspot.com/2010/02/jquery-ui-tabs-updating-url-with-hash.html * https://stackoverflow.com/questions/570276/changing-location-hash-with-jquery-ui-tabs */ $("#tabs").bind('tabsshow',ui) { // remove the prefix from the ID,so we're showing the original ID in the hash window.location.hash = ui.tab.hash.replace('mod_',''); });