如何在javascript

时间:2016-07-27 05:14:37

标签: javascript

我有一个带有函数的数组: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>

2 个答案:

答案 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)]();
  }; 

Demo

此处使用document.write()也会覆盖DOM。因此我不推荐它,而是您可能希望将此内容放在元素中。如果你有一些id #foo的元素,你可以改为设置该DOM元素的文本:

document.getElementById("foo").textContent = "...";

Demo 2

答案 1 :(得分:1)

您的数组声明实际上正在调用funct1funct2并尝试将返回值存储在数组中。你想要的是一系列功能。删除括号,使函数本身存储在数组中而不是返回值。它应该是这样的:

var ranArray = [funct1, funct2];