2014-02-16 140 views
0

我試圖從我的數組中獲取一個隨機的名稱,一旦單擊按鈕就顯示出來。在控制檯中,我得到「Uncaught ReferenceError:arry沒有定義」,我認爲這是因爲arry不是全局變量。我該如何糾正這種情況?全局變量和innerHTML

jsbin

var randomName = function() { 
    arry = ["Kevin", "John", "Mabel", "Lucy", "Isabella", "Ryan", "Clyde"]; 
    var random = arry[Math.round(Math.random() * arry.length)]; 
    return random; 
}; 

// create button 
var button = document.createElement("input"); 
var id = "btn"; 
    button.type = "submit"; 
    button.value = "click me!"; 
    button.setAttribute("id", "btn"); 

document.body.appendChild(button); 

// initialize function 
window.onload = function() { 
// add event listener 
    document.getElementById("btn").addEventListener("click", function(e) { 
    document.getElementById("name").innerHTML = arry[0].random; 
    console.log("hi"); 
    } 
); 
}; 
+0

既然你似乎有現在你的問題解決了更換此行

document.getElementById("name").innerHTML = arry[0].random; 

,你應該選擇的答案爲最佳答案之一點擊勾選向左的首選答案,以完成在StackOverflow上提出問題的適當過程。 – jfriend00

回答

2

改變這一行:

document.getElementById("name").innerHTML = arry[0].random; 

這樣:

document.getElementById("name").innerHTML = randomName(); 

工作演示:http://jsbin.com/xugeg/1

您創建ŧ他功能randomName()從你的數組中獲取一個隨機值,你需要做的就是調用它。

arry[0].random;是錯誤的,因爲arry[0]是一個字符串,並且沒有名爲random的屬性。

+0

這是正確的答案。但是,爲了補充這一點,OP應該在「arry」的定義之前加上「var」,這樣函數就不會將「arry」賦值給全局的「window」對象。 –

+0

@MichaelAaronSafyan - 這取決於OP是否希望'arry'是全球性的。我不確定OP的意圖是什麼,但好處是它是全球性的,可能並不需要。 – jfriend00

+0

這似乎打印整個randomName函數雖然... – CrystalH

1

爲什麼不使用您現有的randomName()函數?

只需使用

document.getElementById("name").innerHTML = randomName();