2011-06-17 159 views
4

在我的HTML代碼中,我有一個按鈕,當它按下時運行一個javascript函數。這是該按鈕的HTML代碼:爲什麼這個javascript會拋出這個特定的錯誤?

<button type="button" onclick="repeatName()">Click me!</button> 

我希望用戶在文本字段(表單內部)中輸入內容。這是文本字段代碼:我想這個div的innerHTML根據投入名稱的文本框,一旦按鈕被按下的信息來改變

<input type="text" name="txtName" /> 

。這是DIV代碼:

<div name="editThis" width="50px" height="50px" border="1px"> 

</div> 

當單擊該按鈕,我希望它運行下面的函數。它應該改變div的innerHTML。

function repeatName() { 
    var editField = document.getElementsByName("editThis").innerHTML; 
    var repeatedName = document.theForm.txtName.value; 

    editField = (repeatedName + " is the value.") 

} 

的問題是,只要單擊該按鈕時,我看到這個錯誤在Firefox的錯誤控制檯:

Error: uncaught exception: [Exception... "Cannot modify properties of a WrappedNative" nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)" location: "JS frame :: chrome://global/content/bindings/autocomplete.xml :: onxblpopuphiding :: line 825" data: no] 

這是什麼錯誤,我該如何糾正呢?

回答

11

根據the documentationdocument.getElementsByName(str)返回「元素列表」。

很明顯,「元素列表」沒有單一的.innerHTML屬性。我猜想具體的錯誤與你的瀏覽器內部機制有關,用於表示該列表的WrappedNative類型。

改變結果,而不是;在你的情況下,你只需要第一個結果,所以用數組訪問器語法[0]來得到它。

,因爲name特性涉及形成組件,您應該使用id代替。通過ID檢索元素更容易,因爲ID [應該是]唯一的。

此外,由於Javascript沒有引用,因此不能將innerHTML存儲在變量中,並且將其更改爲期望更改原始屬性;你必須在你譜寫innerHTML同一語句中賦值:

function repeatName() { 
    var editField = document.getElementsById("editField"); 
    var repeatedName = document.theForm.txtName.value; 

    editField.innerHTML = repeatedName + " is the value." 
} 
+0

此外,這隻會改變變量'editField'的價值,但它不會改變editThis'的'了'innerHTML'。 – mVChr 2011-06-17 00:50:21

+0

當你設置editField的值時,應該發生什麼......這不會改變元素的innerHTML。 – rob 2011-06-17 00:50:24

+0

需要說'editField = document.getElementsByName(「editThis」)[0]'然後'editField.innerHTML = ...'而不是'editField = ...' – nnnnnn 2011-06-17 00:56:13

1

我認爲託默勒格有它的權利。或者,您可以給你的div一個id,然後使用getElementById,它將返回一個單一的對象而不是一個集合。

<div id="editThis" .... > .... </div> 
... 
... 
document.getElementById("editThis").innerHTML = repeatedName + " is the value"; 
0

div元素沒有name屬性,所以用一個id來代替。

<div id="editThis" ...> 

然後使用:

function repeatName() { 
    var editField = document.getElementById("editThis"); 
    if (editField) { 
    editField.innerHTML = document.theForm.txtName.value + ' is the value'; 
    } 
} 
相關問題