2

似乎无法从函数中提取值……看起来很简单,但无法实现。我认为这是一个异步问题,但即使使用 async:false; 它仍然返回未定义。

<script type="text/javascript">
var activeTab;

function toggleVisibility(selectedTab) {
//Let the navigation know what tab is selected
activeTab = selectedTab;
return activeTab;
}
</script>

<script type="text/javascript">
document.write(window.activeTab);
</script>

这是对函数的调用

<a href="#" onclick="toggleVisibility('linkname');">LinkName</a>
4

1 回答 1

2

您的脚本包含 document.write(window.activeTab); 在您单击链接之前运行良好,否则它将覆盖您的整个文档,因为如果 DOM 已经加载,这就是 document.write 所做的。

由于您在单击链接之前运行它 window.activeTab 尚未分配值。

有很多解决方案,但是您需要什么解决方案取决于您实际想要使用activeTab. 我假设您真的想将它用于某事,而不仅仅是document.write它。

更新

您似乎想根据 的值更新图像window.activeTab。您更新图像的代码也应该在 onclick 处理程序中,以便在单击链接时执行,而不是在加载页面时执行。出于几个原因,您也应该避免document.write,但最明显的是我已经说过的:如果页面在您使用时已经加载,它将覆盖您的整个文档。

您可能想尝试以下方法:

<a href="#tab1" class="tabs">LinkName</a>

在标签页的 HTML 之后的某处:

<script>
(function(){

var tabs = document.getElementsByClassName('tabs');

// For each tab
for(var i = tabs.length; i--;){

    // Add click handler to tab
    tabs[i].onclick = switch_tab;

    // Hide tab
    a_to_tab(tabs[i]).style.display = 'none';
}

// Show first tab
a_to_tab(tabs[0]).style.display = '';



function switch_tab(){
    // Hide all tabs
    for(var j = tabs.length; j--;){
        a_to_tab(tabs[j]).style.display = 'none';
    }

    // Show this tab
    a_to_tab(this).style.display = '';

    // Cancel default onclick action
    return false;
}

// Get the tab element from the a element that refers to it by href
function a_to_tab(a){
    return document.getElementById(a.href.replace(/^[^#]*#/, ''));
}

})();
</script>

请参阅此JSFiddle

您可能还想查看jQuery UI 选项卡

于 2012-06-12T18:45:35.090 回答