Skip to content

Commit c3145b6

Browse files
jentersscottgonzalez
authored andcommitted
Tab: modified init to display correct content of misordered div when hash present in url. Fixed #6125 - Incorrect selection of tab on init with hash in url and misordered divs
1 parent e66cdfc commit c3145b6

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

tests/unit/tabs/tabs.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ <h2 id="qunit-userAgent"></h2>
6161
<li><a href="#colon:test"><span>1</span></a></li>
6262
<li><a href="#inline-style"><span>2</span></a></li>
6363
<li><a href="data/test.html#test"><span>3</span></a></li>
64-
<li><a href="data/test.html" title="∫ßáö Սե"<span>4</span></a></li>
64+
<li><a href="data/test.html" title="∫ßáö Սե"><span>4</span></a></li>
6565
</ul>
6666
<div id="colon:test"></div>
6767
<div style="height: 300px;" id="inline-style"></div>
@@ -107,6 +107,14 @@ <h2 id="qunit-userAgent"></h2>
107107
<div id="tabs6-1"></div>
108108
<div id="tabs6-2"></div>
109109
</div>
110+
<div id="tabs7">
111+
<ul id="tabs7-list">
112+
<li><a href="#tabs7-1">1</a></li>
113+
<li><a href="#tabs7-2">2</a></li>
114+
</ul>
115+
<div id="tabs7-2"></div>
116+
<div id="tabs7-1"></div>
117+
</div>
110118
</div>
111119
</body>
112120
</html>

tests/unit/tabs/tabs_methods.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,42 @@ test('init', function() {
2121
equals( $('div', el).index( $('div.ui-tabs-hide', '#tabs1') ), 1, 'second panel should be hidden' );
2222
});
2323

24+
test('init with hash', function() {
25+
expect(5);
26+
27+
//set a hash in the url
28+
location.hash = '#fragment-2';
29+
30+
//selection of tab with divs ordered differently than list
31+
el = $('#tabs1').tabs();
32+
33+
equals(el.tabs('option', 'selected'), 1, 'second tab should be selected');
34+
35+
ok(!$('#tabs1 ul li:eq(0)').is('.ui-tabs-selected.ui-state-active'), 'first tab should not be selected nor active');
36+
ok($('#tabs1 div:eq(0)').is('.ui-tabs-hide'), 'first div for first tab should be hidden');
37+
38+
ok($('#tabs1 ul li:eq(1)').is('.ui-tabs-selected.ui-state-active'), 'second tab should be selected and active');
39+
ok(!$('#tabs1 div:eq(1)').is('.ui-tabs-hide'), 'second div for second tab should not be hidden');
40+
});
41+
42+
test('init mismatched order with hash', function() {
43+
expect(5);
44+
45+
//set a hash in the url
46+
location.hash = '#tabs7-2';
47+
48+
//selection of tab with divs ordered differently than list
49+
el = $('#tabs7').tabs();
50+
51+
equals(el.tabs('option', 'selected'), 1, 'second tab should be selected');
52+
53+
ok(!$('#tabs7-list li:eq(0)').is('.ui-tabs-selected.ui-state-active'), 'first tab should not be selected nor active');
54+
ok($('#tabs7 div:eq(1)').is('.ui-tabs-hide'), 'second div for first tab should be hidden');
55+
56+
ok($('#tabs7-list li:eq(1)').is('.ui-tabs-selected.ui-state-active'), 'second tab should be selected and active');
57+
ok(!$('#tabs7 div:eq(0)').is('.ui-tabs-hide'), 'first div for second tab should not be hidden');
58+
});
59+
2460
test('destroy', function() {
2561
expect(6);
2662

ui/jquery.ui.tabs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,13 @@ $.widget( "ui.tabs", {
210210
this.lis.removeClass( "ui-tabs-selected ui-state-active" );
211211
// check for length avoids error when initializing empty list
212212
if ( o.selected >= 0 && this.anchors.length ) {
213-
this.panels.eq( o.selected ).removeClass( "ui-tabs-hide" );
213+
$( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
214214
this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
215215

216216
// seems to be expected behavior that the show callback is fired
217217
self.element.queue( "tabs", function() {
218218
self._trigger( "show", null,
219-
self._ui( self.anchors[ o.selected ], self.panels[ o.selected ] ) );
219+
self._ui( self.anchors[ o.selected ], $( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ) ) );
220220
});
221221

222222
this.load( o.selected );

0 commit comments

Comments
 (0)