0

我的问题是,每当我设置一个事件时,它只会触发一次。在我当前的代码中,我要做的就是将查看者单击的 div 设置为一个类,并将其他 div 设置为不同的类。这是我的javascript:

<script type="text/javascript">
var d = document;
function acc(id){
    var opn = d.getElementsByClass('opn')[0];
    var elem = d.getElementById(id);

    if(opn.id != id){
        opn.className = 'clo';
        elem.className = 'opn';
    }
}
</script>

我的 HTML 是:

<div id="a" class="opn" onclick="acc('a');">a</div>
<div id="b" class="clo" onclick="acc('b');">a</div>
<div id="c" class="clo" onclick="acc('c');">a</div>

我希望代码在随后单击 div 元素时再次触发。

4

2 回答 2

1

我认为您需要一个 else 语句来将该类置于其原始状态,以便再次单击它时可以将其设置为新类。

于 2012-07-05T11:17:46.120 回答
0

您的代码看起来几乎是正确的,除了(如注释中的@lanzz 所标识)您调用了错误的方法来获取当前opn元素,这意味着您以后的测试将失败。

如果您查看过,这将在您的浏览器的 JS 控制台中报告错误...

无论如何,我建议进行适度的改进 - 无需传递id当前元素的 。

只需像这样编写您的处理程序:

onclick="acc(this)"

并像这样更新您的功能:

function acc(elem) {
    var opn = d.getElementsByClassName('opn')[0];

    if (opn !== elem) {
        opn.className = 'clo';
        elem.className = 'opn';
    }
}

我还注意到,理论上每次触发事件时都不需要更新opn- 它应该是每次更新 DOM 时自动更新的节点的“实时”列表。

于 2012-07-05T12:30:53.437 回答