2016-01-15 33 views
0
$("div").each(function(i, obj) { 
    i++; 
    var stopLoop = false; 
    if (!$(obj).attr('style') && stopLoop !== true) { 
    $(obj).attr('style', 'background:'+getRandomColor()+';'); 
    return false; 
    } 
}); 

上面的方法工作,每當函數被觸發時,它會爲我的div添加一個新的顏色。但由於返回false被使用,我的代碼在它之後不會運行。所以我嘗試使用如果條件而不是返回false,它不會工作相同。如果條件使用Javascript循環停止

// doesn't work 

    $("div").each(function(i, obj) { 
     i++; 
     var stopLoop = false; 
     if (!$(obj).attr('style') && stopLoop !== true) { 
     $(obj).attr('style', 'background:'+getRandomColor()+';'); 
     stopLoop = true; 
     } 
    }); 
+3

你確定你不想'返回true'嗎? 'return true'與** continue **相同​​,而'return false'與** break **相同​​。 –

+0

您是否嘗試過使用'return'? – Rajesh

回答

0

使用下面

var stopLoop = false; 

$("div").each(function(i, obj) { 
    if(i === 0) { 
    stopLoop = false; 
    } 

    i++; 

    if (!$(obj).attr('style') && !stopLoop) { 
    $(obj).attr('style', 'background:'+getRandomColor()+';'); 
    stopLoop = true; 
    } 
}); 
+0

如果您在每個函數的外部範圍中都停止了操作,那麼爲什麼您要再次檢查'i === false'? – Jennifer

+0

@Jennifer我沒有看到你的整個應用程序只是你提供的片段。如果您多次使用它,例如在一個函數或事件處理函數中,變量'stopLoop'應該被重置爲'false',否則第一個循環執行後第二個條件將總是爲false。 –

0

嘗試用突破:

$("div").each(function(i, obj) { 
    i++; 
    if (!$(obj).attr('style')) { 
     $(obj).attr('style', 'background:'+getRandomColor()+';'); 
     break; 
    } 
}); 
0

解決方案申報stopLoop變量在全局範圍內。 在你的案例中,stopLoop在函數內停用,在函數結束後它的工作變量將被刪除。在另一次迭代中,它將再次聲明值爲假