我的问题是,每当我设置一个事件时,它只会触发一次。在我当前的代码中,我想要做的就是将查看器单击的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元素时再次触发代码。
答案 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时自动更新的“实时”节点列表已更新。