0

抱歉,问题标题含糊不清 - 不确定如何措辞。

基本上,我有以下想要使用 for 循环压缩的 JavaScript。

$('.q1').keyup(function () {
    if ($.inArray($(this).val().toLowerCase(), a1) > -1) {
        //Stuff
    } else {
        //Other stuff
    };
});

$('.q2').keyup(function () {
    if ($.inArray($(this).val().toLowerCase(), a2) > -1) {
        //Stuff
    } else {
        //Other stuff
    };
});

您可以看到这两个函数之间的唯一变化是第一个类(.q1 或 .q2)和数组名称(a1 或 a2)。到目前为止,我已经做了以下......

for (var i=1; i<=8; i++) {
    $('.q'+i).keyup(function () {
        if ($.inArray($(this).val().toLowerCase(), a1) > -1) {
            //Stuff
        } else {
            //Other stuff
        };
    });
}

您可以看到第一类问题已通过递增 i 变量解决,但我不确定如何在每个循环上更改数组值,使其变为 a1、a2、a3、a4 等。

任何帮助将非常感激。谢谢你。

编辑

a1 和 a2 指的是数组...

var a1 = new Array();
a1[0] = "egypt";

var a2 = new Array();
a2[0] = "brasil";
a2[1] = "brazil";

对于测验的每个答案,我都有一个数组。在每个数组中是每个问题的可能答案。

4

2 回答 2

3

有一种通常用于此类问题的数据结构:数组。它们比拥有一堆变量更适合您的问题。

假设你有一个数组a,你可以做

for (var i=1; i<=8; i++) {
  (function(answers){
    $('.q'+i).keyup(function () {
        if ($.inArray($(this).val().toLowerCase(), answers) > -1) {
            $('#r').text('ok');
        } else {
            $('#r').text('not ok');
        };
    });
  })(a[i-1]);
}

您的数组将像这样初始化:

var a = [];
a.push([
   "egypt"
]);
a.push([
   "brasil",
   "brazil"
]);

示范

于 2013-11-06T10:11:36.987 回答
0

改变这个: var a1 = new Array(); a1[0] = "埃及";

var a2 = new Array();
a2[0] = "brasil";
a2[1] = "brazil";

对此:

var a = new Array();
a.push(["egypt"]);
a.push(["brasil","brazil"]);

以便

a[0][0] == a0[0] == "埃及"

a[1][0] == a1[0] == "巴西"

a[1][1] == a1[1] == "巴西"

那么 if 语句就变成了:

for (var i=1; i<=8; i++) {
    $('.q'+i).keyup(function () {
        if ($.inArray($(this).val().toLowerCase(), a[i-1]) > -1) {
            //Stuff
        } else {
           //Other stuff
        };
   });
}
于 2013-11-06T10:24:27.520 回答