2014-01-07 111 views
2

工作中,我试图让一个JavaScript代码使用较小的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 all = function(){ 
    for(var i=0;i<=AantalItems;i++) { 
     $("div#item" + i).fadeOut("fast"); 
    } 
}; 
+0

可能重复[JavaScript的for循环指数陌生感](http://stackoverflow.com/questions/2803351/javascript-for -loop-index-strangeness) – Andy

+0

是的,当执行点击处理程序时,'k'总是=== AantalItems-1。但是,除此之外,原始代码更容易阅读。 – johnnycardy

+0

缺少“;”以及关闭功能 – NewInTheBusiness

回答

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"); 
     } 
} 
+0

感谢您的快速响应!但它似乎没有这样做,它也不会淡出使用该嗯 – user3168692

+0

我已经更新答案检查现在。 –

+0

这似乎是做到了,但它现在淡出,然后消失,所以它双淡出 – user3168692

0

,你可以创建一个函数返回一个函数,并传递k它:

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

或者只是添加常用类的项目,以及链接对象的id其data属性 - 那么整个代码如下:

$('.commonClass').click(function() { 
    $('.anotherCommonClassForDivs').fadeOut("fast"); 
    $('div#' + $(this).data('id')).fadeIn("fast"); 
}); 

和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> 

LIVE DEMO

0

试试这个..

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