我想在jquery .click函数之外调用局部变量totalYes。要做到这一点,我应该把它变成一个全局变量,对吗?最初,代码看起来像:
var answers = [thing1, thing2, thing3, thing4, thing5, thing6, thing7, thing8, thing9, thing10, thing11, thing12];
var answers2 = [answers2array12items];
$("#submmit").click(function() {
var totalYes=0;
function checkAnswers() {
for(var i=0; i<answers.length; i++) {
var userAnswer = document.getElementById("b"+i).value.toLowerCase();
if (answers.indexOf(userAnswer.toLowerCase()) !== -1 || answers2.indexOf(userAnswer.toLowerCase()) !== -1) {
totalYes++;
$("#correcto").show();
} else {
$("#incorrecto").show();
}
}
}
checkAnswers();
alert(totalYes);
});
然而,它工作正常,但是,我想在它中使用它:
$("total").click(function(){
alert(totalYes);
});
所以我接受了全部,并且在功能之外进行了全局&#34;新版本是:
var answers = [thing1, thing2, thing3, thing4, thing5, thing6, thing7, thing8, thing9, thing10, thing11, thing12];
var answers2 = [answers2array12items];
var totalYes = 0;
$("#submmit").click(function() {
function checkAnswers() {
for(var i=0; i<answers.length; i++) {
var userAnswer = document.getElementById("b"+i).value.toLowerCase();
if (answers.indexOf(userAnswer.toLowerCase()) !== -1 || answers2.indexOf(userAnswer.toLowerCase()) !== -1) {
totalYes++;
$("#correcto").show();
} else {
$("#incorrecto").show();
}
}
}
checkAnswers();
alert(totalYes);
});
但是在新代码中,不是为每个正确的答案添加1到totalYes,而是像这样增加totalYes:&#34; 1,2,3,4,5,6,7,8,9,10, 11,12&#34;,它增加为:&#34; 1,3,6,10,15,21,27,33,39,46,54&#34;。我尝试在totalYes ++中更改checkAnswers()中的totalYes修饰符; to totalYes + = 1;,但问题仍然存在。
另外,我想知道为什么警报框每次都会显示两次,而不只是一次?
编辑:这里是#total和#submmit的html和css:
<div class="nextsa1" id="total"><strong>TOTAL</strong></div>
<input type="button" id="submmit" value="GO">
答案 0 :(得分:1)
您的代码似乎每次在用户输入新答案时调用完整的答案列表。因此,在每次调用时,Click Inside处理程序中的Test对于当前和所有先前的答案都是成功的,这解释了totalYes
变量的Delta模式。
补救措施:将totalYes
初始化为0作为Click处理程序中的第一条指令。