0

下面是我用来在我的页面上显示/隐藏 div 块的完整代码。目前,当我单击特定文本标题时,它会显示该标题的块内容。然后,当我单击另一个文本标题时,它会显示该标题的另一个块内容,但不会关闭以前打开的块。每当我单击另一个标题时,我都想关闭打开的块。请帮我。

function viewdetail(divno)
{       
    if(document.getElementById("div_com"+ divno).style.display=="block")
    {
        document.getElementById("div_com"+ divno).style.display="none";
        document.getElementById("a_title"+ divno).title="Click to view details";
    }
    else
    {
        document.getElementById("div_com"+ divno).style.display="block";
        document.getElementById("a_title"+ divno).title="Click to hide details";
    }   
    return true;
}


<table>
<?php 
$int_cnt=1;
while(!$rs_list->eof())
{
?>
    <tr> 
        <td>
        <a name="a<?php print($int_cnt)?>"></a>
            <table>
                <tr>
                    <td><a href="#a<?php print($int_cnt)?>" id="a_title<?php print($int_cnt)?>" onClick="return viewdetail(<?php print($int_cnt)?>);"><?php print($rs_list->fields("title"));?></a></td>
                </tr>
                <tr>
                    <td>
                        <div align="justify" id="div_com<?php print($int_cnt)?>" style="display:none"><table><tr><td>Text will display here</td></tr></table></div>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
<?php 
$rs_list->movenext();
$int_cnt=$int_cnt+1;        
}       
?>
</table>
4

3 回答 3

2

您可能想尝试使用一个类来跟踪当前打开的 div,然后使用该类找到之前打开的 div 并关闭它。

getElementByClassName正如您在http://caniuse.com/#feat=getelementsbyclassnamehttps://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName中看到的, Javascript 在现代浏览器中得到了支持。

所以也许将函数重写为:

function viewdetail(divno)
{      
    if(document.getElementsByClassName("last-opened"))
    {
        document.getElementsByClassName("last-opened").style.display="none";
        document.getElementsByClassName("last-opened").title="Click to view details";

    }
    if(document.getElementById("div_com"+ divno).style.display=="block")
    {
        document.getElementById("div_com"+ divno).style.display="none";
        document.getElementById("a_title"+ divno).title="Click to view details";
    }
    else
    {
        document.getElementById("div_com"+ divno).style.display="block";
        document.getElementById("a_title"+ divno).title="Click to hide details";
        document.getElementById("a_title"+ divno).className = "last-opened";
        // Or this next line if you want to keep previous classes there.
        // document.getElementById("a_title"+ divno).className = document.getElementById("a_title"+ divno).className + "last-opened";
    }   
    return true;
}

我没有测试它,但我认为这会奏效。

于 2013-08-03T16:32:53.760 回答
-1

您函数中的逻辑仅处理最后单击的 div。因此,您需要 A,按照其他人的建议执行并关闭所有 B,将 divno 存储在一个变量中,这样您就知道以前打开过一个女巫,现在应该关闭 C,使用 JQuery

于 2013-08-03T07:14:10.417 回答
-2

注意:使用 jquery 为您的 div 赋予类属性,这对于所有 div 都是相同的,并使用 css 使它们隐藏。
HTML(示例):

<table>
    <tr>
        <td><a href="#" class="myLink" id="1">this is 1</a>
        </td>
    </tr>
    <tr>
        <td>
            <div align="justify" id="div_dom1" class="myClass">
                <table>
                    <tr>
                        <td>Text will display here for 1</td>
                    </tr>
                </table>
            </div>
        </td>
    </tr>
    <tr>
        <td><a href="#" class="myLink" id="2">this is 2</a>

        </td>
    </tr>
    <tr>
        <td>
            <div align="justify" id="div_dom2" class="myClass">
                <table>
                    <tr>
                        <td>Text will display here for 2</td>
                    </tr>
                </table>
            </div>
        </td>
    </tr>
    <tr>
        <td><a href="#" class="myLink" id="3">this is 3</a>

        </td>
    </tr>
    <tr>
        <td>
            <div align="justify" id="div_dom3" class="myClass">
                <table>
                    <tr>
                        <td>Text will display here for 3</td>
                    </tr>
                </table>
            </div>
        </td>
    </tr>
</table>

CSS:

.myClass{
    display:none
}

JS:

$(document).ready(function () {
    $(".myLink").on('click',function(){
        $(".myClass").hide();
        var divno =  $(this).attr('id');
        $("#div_dom" + divno).show();
    });
});  

JSFIDDLE 演示

于 2013-08-03T07:11:24.157 回答