2014-02-16 36 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();