2011-02-16 62 views
0

我有一個簡單的JavaScript,我想循環多個元素。這裏是我的代碼:簡單的JavaScript循環幫助

<script type='text/javascript'> 
for(i = 1; i < 100; i++) 
{ 
$('#link'+i).click(function() { 
    $('#container').removeClass(); 
    $('#container').addClass('templateid'+i); 
}); 
} 
</script> 

我想什麼來實現對多個ID的相同addClass功能(例如鏈接2,LINK3,LINK4),與相應的類(如模板2,template3,template4)。

任何幫助將非常感激!

僅供參考,像這樣的一個人打電話,做工作,所以我不明白爲什麼上面的循環不起作用一樣:

<script type='text/javascript'> 
$('#link2').click(function() { 
    $('#container').removeClass(); 
    $('#container').addClass('templateid2'); 
}); 
</script> 
+0

我猜'容器'和'conatiner'是一個錯字,實際上他們是一樣的嗎?你的代碼現在看起來很好。 – Nishant 2011-02-16 06:55:07

+0

`e.return false;`wrong。使用`e.preventDefault();返回false;` – Nishant 2011-02-16 07:01:36

+0

嗯修正拼寫錯誤,並失蹤});.我實際上意識到我不需要返回錯誤的電話。但是,仍然沒有工作。 – Gabriel 2011-02-16 07:16:16

回答

3

的這裏的問題是,i的爲上點擊處理程序中,是對循環i參考,因此將100所有點擊處理循環結束後。

這是一個常見的「錯誤」,並且需要在循環的每次迭代中使用i的副本才能正常工作。

function createHandler(i) { 
    $('#link'+i).click(function(e) { 
     $('#container').removeClass(); 
     $('#container').addClass('template'+i); // this 'i' won't change anymore 
     e.preventDefault();      // thus the code will add the correct class 
     return false; 
    }); 
} 

for(var i = 0; i < 100; i++) { 
    createHandler(i); // one could also create a closure here 
} 

參見:JavaScript Garden: Closures - Avoiding the Reference Problem

0

也許你已經忘了從獨立的計數器字符串

$('#link[' + i + ']').click(function() { 
    $('#templateid').removeClass(); 
    $('#templateid').addClass('templateid[' + i + ']'); 
0

你使用的是原型嗎? $('#link')應該返回id =「link」的元素,並且[i]進一步將其縮小到屬性i。

,如果你想使用變量i從環路找到你的鏈接2,LINK3,..嘗試:

$('#link' + i).click { ... 

也,你的循環似乎是無窮無盡的。