0

我在使用以下代码时遇到问题。当我点击一个链接时,我应该只能看到相应的部分。通过添加警报,我看到脚本隐藏了正确的元素,但在循环运行后一切都恢复正常。此外,如果我将 onClick 事件更改为 onMouseOver,则隐藏元素会在循环完成后保持隐藏状态。

<html>

<head>
<script>

function switchTabs(clicked)
{
    var tab = clicked.innerHTML;
            var content = document.getElementsByTagName('section');

    for(var i=0; i<content.length; i++)
    {
        if(content[i].id && content[i].id.indexOf(tab) !=  -1)
        {
            content[i].style.display = 'inline';
        }
        else
        {
            content[i].style.display = 'none';
        }
    }

}

</script>

</head>

<body>
<nav>
    <ul>
        <li><a href='' onClick='switchTabs(this);'>Javascript</a></li>
        <li><a href='' onClick='switchTabs(this);'>Ajax</a></li>
        <li><a href='' onClick='switchTabs(this);'>PHP</a></li>
    </ul>
</nav>
<section id='JavascriptSection'>
    <h1>Javascript Section</h1>
</section>

<section id='AjaxSection'>
    <h1>AJAX Section</h1>
</section>

<section id='PHPSection'>
    <h1>PHP Section</h1>
</section>
</body>
4

2 回答 2

0

添加 return false 并提供适当的 href。发生的事情是由于超链接默认操作,页面每次都重新加载。另请注意,这仅适用于第一次,因为第二次其他部分将无法用于 id 比较。

<html>

<head>
<script>

function switchTabs(clicked)
{
    var tab = clicked.innerHTML;
            var content = document.getElementsByTagName('section');

    for(var i=0; i<content.length; i++)
    {
        if(content[i].id && content[i].id.indexOf(tab) !=  -1)
        {
            content[i].style.display = 'display';
        }
        else
        {
            content[i].style.display = 'none';
        }
    }
    return false;
}

</script>

</head>

<body>
<nav>
    <ul>
        <li><a href='#' onClick='switchTabs(this);'>Javascript</a></li>
        <li><a href='#' onClick='switchTabs(this);'>Ajax</a></li>
        <li><a href='#' onClick='switchTabs(this);'>PHP</a></li>
    </ul>
</nav>
<section id='JavascriptSection'>
    <h1>Javascript Section</h1>
</section>

<section id='AjaxSection'>
    <h1>AJAX Section</h1>
</section>

<section id='PHPSection'>
    <h1>PHP Section</h1>
</section>
</body>
于 2013-02-14T23:10:25.967 回答
0

将您的“onclick”属性更改为:

<a href='' onClick='return switchTabs(this);'>Javascript</a>

并添加

 return false;

到函数结束。通过这样做,您可以防止<a>标签的默认行为发生。

(正如我在评论中指出的那样,您还需要使用“块”而不是“显示”来使部分可见。)

于 2013-02-14T23:05:38.567 回答