JavaScript - 每种情况下,make数组

时间:2010-09-11 20:30:54

标签: javascript jquery html

我的最后一个问题要求在不使用布尔值的情况下运行一次。我觉得我需要布尔但不需要很多变量因为那会很混乱。

所以让我说我有这个:

var counter = 0;

$(function() {
    $('#typing').keyup(function() {
        switch($(this).val().toLowerCase()) {
          case 'test':
            // DO THIS EVERYTIME TEST CASE IS CALLED
            $('#test').fadeOut("fast", function() {
                $(this).html("<span class='green'>That's correct!</span>").fadeIn("fast");
            });

            // DO THIS ONCE AND ONLY ONCE
            count++;
        }
    });
});

基本上,它是“完成百分比”应用程序的一部分,用户尝试键入我提供的所有案例。因此,如果用户键入测试两次...在第一次运行案例test时,它会向计数器添加1,但在案例test的第二次运行中,它不会添加到计数器。

我不想让它为每个案例添加很多布尔值因为那会很混乱。

得到它? :)

我的想法是制作一个数组,我添加的每个案例都会添加alltogther。所以array [0]将是case test。然后我在第一次尝试时将数组[0]设置为1 ..然后在每个案例数组上创建一个FOR-LOOP以加总。这是一个好主意吗?

唯一的问题是我不知道如何制作每个案例数组。

2 个答案:

答案 0 :(得分:2)

一种简单的方法是使用对象文字作为计数器变量,一旦命中一个案例,就赋值true

var counter = {};
...
case 'test' : counter[$(this).val()] = true;

或者,检查'case'是否已经存储在一个普通的无聊数组中:

var counter = [];
...
case 'test' :
if(!$.inArray($(this).val(), counter)) {
    counter.push($(this).val());
}

答案 1 :(得分:0)

完全按照你的要求行事:

var validKeys = ['test', 'testing', '1337'];
var checkedKeys = {};

function getCount() {
    var counter = 0;
    $.each(validKeys, function(index, value) { //jQuery.each, for neat array iteration
        if(checkedKeys[value])
            counter++;
    }); 
    return counter;
}

$(function() {
    $('#typing').keyup(function() {
        var val = $(this).val().toLowerCase();
        if(val == 'test') { //neater than a switch statement, often
            // DO THIS EVERYTIME TEST CASE IS CALLED
            $('#test').fadeOut("fast", function() {
                $(this).html("<span class='green'>That's correct!</span>").fadeIn("fast");
            });
        }
        checkedKeys[val] = true;
    });
});