根据条件将函数放入数组中(如果选中复选框)

Putting functions in an array based on a condition (if checkbox is checked)

我还在做我的数学游戏。它现在生成随机加法、减法、乘法和除法问题。我所做的是为每种类型的数学运算创建函数并将其放入数组中,然后我有另一个函数从该数组中随机获取一个。它有效! (如果问题没有出现,请点击 "Back to Options" 按钮,然后再次点击 "Click to Play" 按钮) Click here to see it.

//function definitions (See line 116 of jsFiddle link)
var operatorFunctions = [additionQuest,
           subtractionQuest,
           multiplicationQuest,
           divisionQuest];

//Array randomizer
function randomFrom(array) {return array[Math.floor(Math.random() * array.length)];}
function randomOp() {
    var func = randomFrom(operatorFunctions);
    (func)();
}

但现在我想让用户根据他们在开始屏幕上选择的内容来选择他们想练习的问题类型(运算符)。 我的想法是,如果复选框被选中,那么它对应的函数将被压入operatorFunctions数组。

var operatorFunctions = []
// Code below is wrapped in a function that is executed on start button click
if ($('#allowAddition').is(':checked')) {
allowAdd = true;
} else {
allowAdd = false;
}

if (allowAdd == true) {
    operatorFunctions.push(additionQuest);
    return operatorFunctions;
}

但这根本行不通! See it here 你们看到我的逻辑有什么明显的缺陷了吗?我觉得这是一个范围的事情......?

还有,我的divisionQuest函数不是100%正确,有时第一题没有初始化。另外,似乎我不应该反复问同样的问题。 (在第 49 行的第一个 jsFiddle 上将数组中的其他运算符函数注释掉以查看这些问题。) 你们看到这个功能有什么问题吗?

function divisionQuest() {
    var self = this;
var $numberOne = getRandomInt(0,rangeMax);
var $numberTwo = getRandomInt(1,rangeMax); //Divisor cannot be zero

 //This makes sure the a function produces a question whose answer is a whole number
while ($numberOne % $numberTwo != 0) {
    $numberOne = getRandomInt(0,rangeMax);
    $numberTwo = getRandomInt(1,rangeMax)
    return $numberOne, $numberTwo;
}

self.quest = $numberOne / $numberTwo;
self.formatquest = $numberOne + " ÷ " + $numberTwo; //Tidy it up a bit
$questionHolder.html(self.formatquest);
$questionHolder.hide().fadeIn(600);
}

试试这个:http://jsfiddle.net/rezashamdani/nz2cqja8/

<input type="checkbox" name="chooseOp" id="allowAddition" value="+" />Addition 中的 ID 错误 并注意行:43、65-97