不止一次解雇javascript事件

时间:2012-07-05 11:15:47

标签: javascript html javascript-events

我的问题是,每当我设置一个事件时,它只会触发一次。在我当前的代码中,我想要做的就是将查看器单击的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元素时再次触发代码。

2 个答案:

答案 0 :(得分:1)

我认为你需要一个else语句来将类放到它的原始状态,所以当它再次被点击时,它可以被设置为新的类。

答案 1 :(得分: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时自动更新的“实时”节点列表已更新。

相关问题