我想動態地創建一個按鈕,它將從對象中刪除一個鍵。但是,在這一點上,我只是簡單地使用警報來測試正確的值,稍後將傳遞給將放棄密鑰的函數。我正在運行一個for-in循環,我試圖將迭代器傳遞給循環中調用的函數。問題是alert語句正在使用迭代器'i',並且隨着循環結束,此警報的所有實例都被更改爲'i'的最終值。 (我希望是有道理的!)Javascript使用for-in循環迭代器來設置變量
locations = {};
function Location(nickname, address) {
this.nickname = nickname;
this.address = address;
}
Location.prototype.showLocations = function() {
var x=document.getElementById("demo");
output = "<table><tr><th>Location</th><th>Address</th><th>Delete</th></tr>";
for (i in locations) (function(i)
{
output+=listThis(i);
}) (i);
// for (i in locations) {
// output+=listThis(i);
// }
output+="</table>"
x.innerHTML=output;
}
function listThis(i){
thisLoc = locations[i].nickname;
var thisOutput="<tr><td>"+locations[thisLoc].nickname+"</td><td>"+locations[thisLoc].address+"</td><td><input type='button' value='X' onclick='alert(locations[thisLoc].nickname)' /></td></tr>";
return thisOutput;
}
function enterLocation() {
var address = document.getElementById('address').value;
var nickname = document.getElementById('nickname').value;
locations[nickname] = new Location(nickname, address);
locations[nickname].showLocations();
}
標記是:
<p id="demo">Table to go in here.</p>
<div id="panel">
<input id="nickname" type="textbox" placeholder="Location Name" />
<input id="address" type="textbox" placeholder="Sydney, NSW" />
<input type="button" value="Enter" onclick="enterLocation()" />
</div>
請注意,我試圖用這個帖子Javascript - how to work with the iterator in a for loop with callbacks發現信息工作,但都沒有成功。你會看到另一個for循環評論說,我最初嘗試。
不要在JavaScript中生成HTML;只是操縱DOM而已。另外,你可以添加一個[jsFiddle](http://jsfiddle.net/)或類似的顯示問題嗎? – Ryan
問題是全局'thisLoc',而不是'i'。 – bfavaretto
請停止使用全局變量。在本地聲明你的變量。 – jfriend00