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

This commit is contained in:
Klaus Hartl
2009-02-19 20:19:13 +00:00
parent e5268f9c32
commit 1ca5ae160c
2 changed files with 17 additions and 7 deletions

View File

@@ -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.");
});

View File

@@ -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