我的最后一个问题要求在不使用布尔值的情况下运行一次。我觉得我需要布尔但不需要很多变量因为那会很混乱。
所以让我说我有这个:
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以加总。这是一个好主意吗?
唯一的问题是我不知道如何制作每个案例数组。
答案 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;
});
});