Skip to content
Permalink
Browse files

Tabs: normalization of href attribute required in IE, fixes #4134

  • Loading branch information...
Klaus Hartl
Klaus Hartl committed Feb 19, 2009
1 parent e5268f9 commit 1ca5ae160ca1243ba6232abba8f52e09dd7172f6
Showing with 17 additions and 7 deletions.
  1. +3 −1 tests/unit/tabs/tabs_methods.js
  2. +14 −6 ui/ui.tabs.js
@@ -43,7 +43,7 @@ test('disable', function() {
});

test('add', function() {
expect(3);
expect(4);

el = $('#tabs1').tabs();
el.tabs('add', "#new", 'New');
@@ -55,6 +55,8 @@ test('add', function() {
ok(other.is('.ui-state-hover'), 'should not remove mouseover handler from existing tab');
other.simulate('mouseout');

equals($('a', added).attr('href'), '#new', 'should not expand href to full url of current page');

ok(false, "missing test - untested code is broken code.");
});

@@ -81,13 +81,20 @@ $.widget("ui.tabs", {
this.$tabs.each(function(i, a) {
var href = $(a).attr('href');

// For dynamically created HTML that contains a hash as href IE expands
// such href to the full page url with hash and then misinterprets tab as ajax...
if (href.split('#')[0] == location.toString().split('#')[0]) href = a.hash;

// For dynamically created HTML that contains a hash as href IE < 8 expands
// such href to the full page url with hash and then misinterprets tab as ajax.
// Same consideration applies for an added tab with a fragment identifier
// since a[href=#fragment-identifier] does unexpectedly not match.
// Thus normalize href attribute...
if (href.split('#')[0] == location.toString().split('#')[0]) {
href = a.hash;
a.href = href;
}

// inline tab
if (fragmentId.test(href))
if (fragmentId.test(href)) {
self.$panels = self.$panels.add(self._sanitizeSelector(href));
}

// remote tab
else if (href != '#') { // prevent loading the page itself if href is just "#"
@@ -109,8 +116,9 @@ $.widget("ui.tabs", {
}

// invalid tab href
else
else {
o.disabled.push(i);
}
});

// initialization from scratch

0 comments on commit 1ca5ae1

Please sign in to comment.
You can’t perform that action at this time.