我正在使用jquery ui标签在http://www.code7dev4.co.uk/data
页面上的标签之间切换相关的jquery代码是:
jQuery(document).ready(function ($) {
function activateTab($tab) {
var $activeTab = $tab.closest('dl').find('a.active'),
contentLocation = $tab.attr("href") + 'Tab';
// Strip off the current url that IE adds
contentLocation = contentLocation.replace(/^.+#/, '#');
//Make Tab Active
$activeTab.removeClass('active');
$tab.addClass('active');
//Show Tab Content
$(contentLocation).closest('.tabs-content').children('li').hide();
$(contentLocation).css('display', 'block');
}
$('dl.tabs dd a').live('click', function (event) {
activateTab($(this));
});
if (window.location.hash) {
activateTab($('a[href="' + window.location.hash + '"]'));
$.foundation.customForms.appendCustomMarkup();
}
});
现在,客户端需要右侧的表单为每个数据搜索创建唯一的URL,并且这些URL在url中作为参数(例如http://www.code7dev4.co.uk/data?form_send=send&country=Uganda§or=health&strail=plac&units=DollarConstant&year=2009)。
切换标签丢失了网址变量,我留下了/data#table
。
如何更改代码以便维护这些url参数?
答案 0 :(得分:0)
您正在使用以下内容设置基本网址:
<base href="http://www.code7dev4.co.uk/data">
这会在加载http://www.code7dev4.co.uk/data#id时抛弃片段标识符,而不是仅仅附加到当前URL(包括查询字符串)。这意味着正在删除查询字符串,更重要的是重新加载页面(这违背了非重新加载选项卡切换的整个目的)。
删除基本标记可以解决问题,但我不确定其他地方会产生什么影响。
<强>更新强>
以下是我能找到的解决你正在处理的问题的唯一解决方案。这是一个练习,因为我建议不要使用这种技术 - 它不够优雅,除了Chrome v23之外还没有经过测试。实际上,我们通过在锚上base
事件期间重写href
属性来停用click
元素(这将对应于您网页上的标签)。然后,我们在href
事件后20毫秒重置原始mouseup
。我们必须建立延迟,因为mouseup
事件在点击事件之前触发。
var anchor = document.querySelector("a"),
baseElement = document.querySelector("base"),
baseHref = baseElement.getAttribute("href");
anchor.addEventListener("click", function (event) {
baseElement.setAttribute("href", "");
}, true);
anchor.addEventListener("mouseup", function (event) {
setTimeout(function () {
document.querySelector("base").setAttribute("href", baseHref);
}, 20);
}, true);
最好的解决方案是不使用base
标记,但如果您无法控制HTML输出,那么这可能只是节省了一天的时间。我真的很想看看是否有其他人想出更好的(即更优雅的)解决方案。