我有一个带有函数的数组:var ranArray = [funct1(), funct2()]
和函数本身:
function funct1() {
document.write("hello");
};
function funct2() {
document.write("hi");
};
我试图使它无论何时按下按钮,都会执行funct1或funct2。 但是,如果没有我按下按钮,我会在页面上看到我的按钮和#34; hellohi"。以下是随机化的功能:
function getFunctions() {
return ranArray[Math.floor(Math.random * ranArray.length)];
};
这是HTML:
<button type="button" name="ranButton" id="ranButton" onclick="getFunctions();">Random Button</button>
答案 0 :(得分:2)
首先,您需要存储函数引用([funct1, funct2]
),()
将立即调用函数。接下来,您可以使用.call()
来调用该函数,或者更简单地在()
末尾添加ranArray[Math.floor(Math.random() * ranArray.length)]
作为提及的 @jfriend00 。另请注意,Math.random
必须为Math.random()
。
var ranArray = [funct1, funct2];
function funct1() {
document.write("hello");
};
function funct2() {
document.write("hi");
};
function getFunctions() { // Note you don't really need a 'return' here
return ranArray[Math.floor(Math.random() * ranArray.length)]();
};
此处使用document.write()
也会覆盖DOM。因此我不推荐它,而是您可能希望将此内容放在元素中。如果你有一些id #foo
的元素,你可以改为设置该DOM元素的文本:
document.getElementById("foo").textContent = "...";
答案 1 :(得分:1)
您的数组声明实际上正在调用funct1
和funct2
并尝试将返回值存储在数组中。你想要的是一系列功能。删除括号,使函数本身存储在数组中而不是返回值。它应该是这样的:
var ranArray = [funct1, funct2];