Javascript函数在for循环中不起作用

Javascript函数在for循环中不起作用,javascript,jquery,function,loops,for-loop,Javascript,Jquery,Function,Loops,For Loop,我正在尝试使用for循环使javascript代码变小,我是javascript新手,但我认为这会奏效 我想把它缩小一些: $("li#li_item1").click(function(){ all(); $("div#item1").fadeIn("fast"); }) $("li#li_item2").click(function(){ all(); $("div#item2").fadeIn("fast"); }) $("li#li_item3"

我正在尝试使用for循环使javascript代码变小,我是javascript新手,但我认为这会奏效

我想把它缩小一些:

   $("li#li_item1").click(function(){
    all();
    $("div#item1").fadeIn("fast");
})

$("li#li_item2").click(function(){
    all();
    $("div#item2").fadeIn("fast");
})

$("li#li_item3").click(function(){
    all();
    $("div#item3").fadeIn("fast");
})

$("li#li_item4").click(function(){
    all();
    $("div#item4").fadeIn("fast");
})
使用此选项:

    var AantalItem = 159;

    for(var k=0;k<=AantalItems;k++) {
    $("li#li_item" + k).click(function(){
        all();
        $("div#item" + k).fadeIn("fast");
    })

    document.getElementById("test").innerHTML=k;
}
var AantalItem=159;
对于(var k=0;k您可以创建一个返回函数的函数,并将
k
传递给它:

for(var k=0;k<=AantalItems;k++) {
    $("li#li_item" + k).click((function(k){
        return function() {
            all();
            $("div#item" + k).fadeIn("fast");
        }
    })(k));
和html:

<li class="commonClass" data-id="item1">whatever</li>
<li class="commonClass" data-id="item2">whatever</li>

<div class="anotherCommonClassForDivs" id="item1">data for item1</div>
<div class="anotherCommonClassForDivs" id="item2">data for item2</div>
  • 无论什么
  • 无论什么
  • 第1项的数据 第2项的数据

    这是由于闭包效应

    试试这个:

    for(var k=0;k<=AantalItems;k++) {
      $("li#li_item" + k).click(createClickFunction(k));
    }
    
    function createClickFunction(k) {
         return function() {
                all();
                $("div#item" + k).fadeIn("fast");
            }
    }
    
    for(var k=0;k试试这个

      function fadeinAll() {
             $('li#li_item').find('div').each(function () { $(this).fadeIn("fast"); })
         }
         function fadeoutAll() {
             $('li#li_item').find('div').each(function () { $(this).fadeOut("fast"); })
         }
    

    当执行click处理程序时,“k”的可能重复总是===AantalItems-1。但是,除此之外,原始代码更易于阅读。缺少一个“;”同样要关闭该功能感谢您的快速响应!但它似乎没有这样做,它也不会再使用HMM淡出它似乎这样做了,但它现在淡出,然后淡入,所以它会双重淡出
    for(var k=0;k<=AantalItems;k++) {
      $("li#li_item" + k).click(createClickFunction(k));
    }
    
    function createClickFunction(k) {
         return function() {
                all();
                $("div#item" + k).fadeIn("fast");
            }
    }
    
      function fadeinAll() {
             $('li#li_item').find('div').each(function () { $(this).fadeIn("fast"); })
         }
         function fadeoutAll() {
             $('li#li_item').find('div').each(function () { $(this).fadeOut("fast"); })
         }