這是我的JavaScript類的一個代碼:神祕的錯誤
function Foo(text)
{
var container = document.createElement('span');
container.innerHTML = text;
$("#fooContainer").append(container);
this.select = function()
{
$(container).addClass('selected');
}
this.getContainer = function()
{
return container;
}
this.getText = function()
{
return text;
}
}
在每個頁面加載我做到以下幾點:
var fooList = {};
fooList['foo1'] = new Foo('Foo 1');
fooList['foo2'] = new Foo('Foo 2');
fooList['foo3'] = new Foo('Foo 3');
這將導致跨度爲每個foo
對象正確創建,導致在這種情況下:
<div id="fooContainer">
<span>Foo 1</span>
<span>Foo 2</span>
<span>Foo 3</span>
</div>
但是,如果我這樣做:
fooList['foo1'].select();
然後它會導致這樣的:
<div id="fooContainer">
<span>Foo 1</span>
<span>Foo 2</span>
<span class="selected">Foo 3</span>
</div>
不是什麼預期,這是這樣的:
<div id="fooContainer">
<span class="selected">Foo 1</span>
<span>Foo 2</span>
<span>Foo 3</span>
</div>
好像所有foo
對象指向容器的container
對象最後的foo,在這種情況下是foo 3.爲了進一步測試,我做了這個:
for (var key in fooList)
{
console.log(key);
console.log(fooList[key].getText());
console.log(fooList[key].getContainer());
}
這導致了這個被記錄在Firebug控制檯(只顯示它第FOO):
foo1
Foo 1
<span>
當我點擊跨度,然後在Firebug,它指向跨越的第三而非第一或第二如預期。
任何想法我做錯了什麼?我是否需要爲跨度設置一個ID?
這真的是關於'document.createElement'嗎?它似乎正在做它的工作(創建元素)。 – 2012-04-28 11:36:14
我敢打賭一個新的/這個爛攤子。如果沒有人投幣,我會更深入地觀察。 – mddw 2012-04-28 11:40:40
我將你的代碼鍵入jsfiddle,並且你的代碼在http://jsfiddle.net/AVaEH/1/中運行良好。 – 2012-04-28 11:41:39