From 1ca5ae160ca1243ba6232abba8f52e09dd7172f6 Mon Sep 17 00:00:00 2001 From: Klaus Hartl Date: Thu, 19 Feb 2009 20:19:13 +0000 Subject: [PATCH] Tabs: normalization of href attribute required in IE, fixes #4134 --- tests/unit/tabs/tabs_methods.js | 4 +++- ui/ui.tabs.js | 20 ++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index 61ddee642..dbfa9ee33 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.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."); }); diff --git a/ui/ui.tabs.js b/ui/ui.tabs.js index 57ff72f94..f9d4cc512 100644 --- a/ui/ui.tabs.js +++ b/ui/ui.tabs.js @@ -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 -- 2.39.5