Javascript 循环中的闭包:绑定事件侦听器时,循环中声明的变量未正确预设到处理程序函数中

Javascript 循环中的闭包:绑定事件侦听器时,循环中声明的变量未正确预设到处理程序函数中,javascript,jquery,Javascript,Jquery,我正在为自动化单元测试编写一个日志函数 html元素结构: <li> <strong> <ol> <li> <strong> <ol> 当我点击时,我想在同一下的进行切换 代码: for(变量i=0,l=logSuites.length;ili:n子项(+(i+1)+”); var caseli=“……”; ... suiteSl.追加(“”+caseli+“”); var caseLiSl=s

我正在为自动化单元测试编写一个日志函数

html元素结构:

<li> 
  <strong>
  <ol>
<li>
  <strong>
  <ol>
  • 当我点击
    时,我想在同一
  • 下的
    进行切换

    代码:

    for(变量i=0,l=logSuites.length;i
  • ”); var suiteSl=$(“#tests>li:n子项(+(i+1)+”); var caseli=“
  • …”; ... suiteSl.追加(“”+caseli+“”); var caseLiSl=suiteSl.children('ol'); var-toggleCases=function(){ caseLiSl.toggle(); }; suiteSl.children('strong').bind('click',toggleCases); }
    问题是每次触发事件时,都会切换最后一个
    。。函数
    toggleCases
    中的变量
    caseLiSl
    始终是它最后一次在
    for
    循环中设置的时间

    suiteSl.children('strong').bind('click', function(){
       $(this).children('ol').toggle();
    });
    
    通过这种方式,
    this
    变量引用单击的元素,您只需切换它的直接
    子元素

    我认为您应该这样做

    suiteSl.children('strong').bind('click', function(){
       $(this).children('ol').toggle();
    });
    

    通过这种方式,
    this
    变量引用单击的元素,您只切换直接的
    子元素,这是一个更常见的问题。我们在循环中使用闭包(for或while),它始终保持增量的最后一个值


    答案可以在这个问题中找到:

    这是一个更常见的问题。我们在循环中使用闭包(for或while),它始终保持增量的最后一个值


    答案可以在这个问题中找到:

    这又是一个常见的循环闭包问题


    您可能应该阅读以下内容:

    这也是循环中常见的闭包问题


    您可能应该阅读以下内容:

    强大javascript Closure的常见问题强大javascript Closure的常见问题可能不清楚,但不是的孩子,而是
  • <代码>$(this.parent().children('ol').toggle()有效,thanksI可能不清楚,但不是的孩子,而是
  • 的孩子<代码>$(this.parent().children('ol').toggle()有效,谢谢