首先,我找到了一些似乎解決這個問題的鏈接,但是我對javascript(以及一般的代碼)的理解非常糟糕,解決方案/解釋對我來說很難概括這裏。我知道這與封閉有關(我隱約明白)。用for循環創建多個函數
背景: 我創建使用循環中,每個與應該當複選框被選中出現4單選按鈕10項的複選框。我可以通過逐個創建10個以上的函數來完成「出現/消失」,但我更喜歡用循環創建我的十個函數。下面的代碼顯示了每個複選框如何在更改時調用可變函數(例如,t0Disp())。
<?
for ($row = 0; $row <10; $row++)
{
$topic = $topic[$row];
?>
<input id="C<? echo $row ?>" type="checkbox" value="true" onchange="t<? echo $row ?>Disp()" /><? echo $topic ?>
<br />
<div id="<? echo $row ?>div" style="display: none">
<? for ($col = 0; $col < 4; $col++)
{
?>
<input type="radio" name="r<? echo $row ?>" value="<? echo $col ?>" onchange="disable<? echo $col ?>(); disable<? echo $row ?>();" />
<? echo $col+1; ?>
<?
}
?>
<br />
<br />
</div>
<?
}
?>
上面的代碼工作正常,如果我通過t9Disp()函數手動輸入我的t0Disp()。當我試圖使一個for循環才能實現這些功能(如下圖),該功能僅適用於t9Disp()
for (var i=0; i<10; i++) {
var idiv = i + "div";
var eldiv = document.getElementById(idiv);
var ci = "C" + i;
var elci = document.getElementById(ci);
window['t' + i + 'Disp'] = function() {
if(elci.checked == true) {
eldiv.style.display = "inherit";
}
else {
eldiv.style.display = "none";
}
}
}
我只需要明白,爲什麼JavaScript的循環不只是吐在10層不同的功能我的PHP循環吐出10個不同的複選框的方式?
謝謝!
你不需要多個函數..從來沒有在循環.. – Rayon
可能重複[JavaScript閉合內部循環 - 簡單實用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops -simple-practical-example) – vlaz
除了重複之外,我甚至不知道爲什麼要使用10個函數,而不是簡單地使用1個參數。 – vlaz