2012-12-04 53 views
-1

我有以下的javascript行:的Javascript的innerHTML更新錯誤

<div id="box" name="1" margin="4px" padding="4px" onclick="memory(1)"></div> 

與關聯memory()函數爲:

function memory(a) { 
    var tmpDar = a-1; 
    var m = document.getElementsByName(tmpDar); 
    m.innerHTML = arrA[tmpDar]; 

} 

然而,當我嘗試執行代碼時,HTML不會改變... 有人能幫幫我嗎?

+0

'arrA'的內容是什麼? –

+0

你真的有一個名爲'0'的元素嗎? (tmpDar)我想可能不是。你的'getElementsByName(tmpDar)'看起來有問題。 –

+0

使用另一個函數動態地使用0到999之間的隨機數填充arrA – MrD

回答

1

document.getElementsByName()返回一個節點列表,而不是一個單一的元素!

因此,爲了設置你的div的innerHTML,你要引用數組內的條目,例如,像這樣:

function memory(a) { 
    var tmpDar = a-1; 
    var m = document.getElementsByName(tmpDar); 
    m[0].innerHTML = arrA[tmpDar]; 
} 

在你的代碼設置innerHTML屬性爲NodeList對象,在文檔中沒有(視覺)效果。

一般來說它會更好地使用id而不是name。然後,你可以在這樣的方式使用document.getElementById()

function memory(a) { 
    var tmpDar = a-1; 
    var m = document.getElementById(tmpDar); 
    m.innerHTML = arrA[tmpDar]; 
} 
+0

該死!你一直比我快:) –

+0

不過,看看'tmpDar'的價值。這看起來像一個id或元素名稱? –

+0

@MichaelBerkowski琢磨一下號碼name屬性了。但我發現的唯一參照的是[這](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#attr-fe-name ),它允許name屬性使用任何「非空值」。 – Sirko

0

你想找到的0名稱的所有元素,據我可以告訴。並沒有0名稱。

而且其他兩個說的話,它返回你需要調用數組的索引的數組。

+0

它是'getElementsByName()',而不是'getElementsByTagName()',但名稱屬性不太可能是'tmpDar'的值0 –

+0

@MichaelBerkowski你的權利我誤解了。更新 – Ryan

0

document.getElementsByName返回一個數組。所以如果你想要的元素是唯一的這個名字,你應該用你的代碼替換:

function memory(a) { 
    var tmpDar = a-1; 
    var m = document.getElementsByName(tmpDar); 
    m[0].innerHTML = arrA[tmpDar]; // Here I have added index 0 
} 
+0

這工作,非常感謝你! ; d – MrD