javascript - 添加了事件监听器,但需要点击 2 次

标签 javascript jquery

我已将事件监听器添加到 $(document).ready 上的一些 div。但是,第一次需要单击两次才能触发事件(或至少获得结果。)

我正在添加一个单击处理程序,并将子节点显示或隐藏为 Accordion 。有什么想法吗?

 $(document).ready(function(){ 
      headers=document.getElementsByClassName("headerH");
      for(var i=0;i<headers.length;i++){
          var headline=headers[i].firstChild.innerText;
          headers[i].firstChild.innerText="+"+headline;
          headers[i].addEventListener('click', accord, false);
      }
  }); 

function accord(){
    listofnodes=this.children;
    for (var i=1; i<listofnodes.length; i++){
        var headline=listofnodes[0].innerText;
        if (listofnodes[i].style.display=="none"){
            listofnodes[i].style.display="block";
            listofnodes[0].innerText="-"+headline.substring(1);
        }
        else {
             listofnodes[i].style.display="none";
             listofnodes[0].innerText="+"+headline.substring(1);
        }
    }
}

最佳答案

您的问题是 javascript 属性 style.display 第一次等于空字符串。初始显示属性不是从 CSS 表填充的。

如果你翻转你的 if/else 语句,你应该在第一次点击时让它工作:

if (listofnodes[i].style.display=="block"){
    listofnodes[i].style.display="none";
    listofnodes[0].innerText="+"+headline.substring(1);
}
else {
    listofnodes[i].style.display="block";
    listofnodes[0].innerText="-"+headline.substring(1);
}

编辑:对于那些希望以最正确的方式完成此操作的人:

您可以使用Window.getCompulatedStyle从样式表中提取默认值。这需要更多的代码,但适用于更多情况。

var element = listofnodes[i];
var display = element.style.display || getComputedStyle(element).getPropertyValue("display");
if (display=="none"){
    element.style.display="block";
    listofnodes[0].innerText="-"+headline.substring(1);
}
else {
    element.style.display="none";
    listofnodes[0].innerText="+"+headline.substring(1);
}

关于javascript - 添加了事件监听器,但需要点击 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034257/

相关文章:

javascript - 在PHP环境中安装和使用Gulp?

javascript - Gruntjs Livereload 正在观看但未更新

javascript - 带有隐藏字段的表单提交

javascript - 正则表达式在 javascript 中的值和键周围添加双引号

javascript - 如何调试 assemble.io(最好在 Chrome 控制台中)

javascript - 我可以重置 jQuery 全局对象的名称吗?

jquery - 滚动距离顶部 20px 时需要修复 div

javascript - 鼠标滚轮事件触发过于频繁/许多滚动会破坏动画

Jquery - 更改其中包含 "="的类

javascript - 我总是得到相同的html