Javascript 当我调用函数本身时,Math.random中的值会导致问题

Javascript 当我调用函数本身时,Math.random中的值会导致问题,javascript,jquery,Javascript,Jquery,这个脚本给我带来了问题。我已经写了好几次了,但是我遗漏了一些东西 “问题”数组引用我的对象。这些对象是不同的问题,“a”始终是正确答案 到目前为止,脚本运行良好。其思想是从0递增“n”以滚动浏览我的数组,并在单击正确答案时提供下一个问题x’总是正确的答案(它总是包含‘a’) 因此,我可以在正确的猜测上增加'n'很好;但是,当我再次调用函数“a()”(在警报“hi”部分之后)时,它会导致问题。我想增加n,然后调用a(),这样我就得到了下一个问题。然后我想把正确的猜测(x)放在一个随机的位置(即位置

这个脚本给我带来了问题。我已经写了好几次了,但是我遗漏了一些东西

“问题”数组引用我的对象。这些对象是不同的问题,“a”始终是正确答案

到目前为止,脚本运行良好。其思想是从0递增“n”以滚动浏览我的数组,并在单击正确答案时提供下一个问题x’总是正确的答案(它总是包含‘a’)

因此,我可以在正确的猜测上增加'n'很好;但是,当我再次调用函数“a()”(在警报“hi”部分之后)时,它会导致问题。我想增加n,然后调用a(),这样我就得到了下一个问题。然后我想把正确的猜测(x)放在一个随机的位置(即位置0、1或2)

谢谢你的帮助

var questions = [q0,q1,q2,q3,q4,q5,q6,q7];

var n = 0;

function a(){
var y;
var z;

var x = Math.floor((Math.random() * 3))
if(x == 0){y = 1; z = 2}else if(x == 1){y = 0; z = 2}else{y = 0; z = 1}

$("#question_holder").text(questions[n].q);

    $(".answer_holder").eq(x).text(questions[n].a);
    $(".answer_holder").eq(y).text(questions[n].b);
    $(".answer_holder").eq(z).text(questions[n].c);


    $(document).ready(function(){

        $(".answer_holder").eq(x).click(function(){
            alert("hi");
                        n++;
            a();

                     /*this area needs to get the next question by incrementing
                     n, then generate a different value to x, to place it
                     in a different position. which it does. however,
                     in subsequent questions, you can click the wrong answer as if
                     it's correct, ie not 'a' or 'x'.*/
        });
    });
};

你的逻辑在这里有点奇怪。。您试图做的是在每次运行()时注册一个新的单击事件。我认为您需要为所有
answer\u holder
元素注册一个click事件,并在事件处理程序中检查这是哪个元素并相应地处理它

请注意以下事项:

$(document).ready(function(){
)-此处理程序中定义的函数应在加载页面后运行。我认为您不希望在()内使用它。它通常仅在全局范围内使用(在所有函数之外)

$(“.answer\u holder”).eq(x)。单击(function(){
-此事件处理程序根据
x
的值注册您的函数。我建议您为所有
$(“.answer\u holder”)
注册一个事件处理程序,而不依赖
x
(在全局范围内)。并且在该事件处理程序内(在函数中),您可以检查触发事件的元素(使用
$(this)
-它返回单击的元素)

您将$(document).ready()放在错误的位置。请尝试类似的操作(注意:这完全未经测试):

功能设置问题(n){
变量x,y,z;
x=数学楼层((数学随机()*3))
如果(x==0){y=1;z=2}如果(x==1){y=0;z=2}其他{y=0;z=1}
$(“#问题持有人”).text(问题[n].q);
$(“.answer_holder”).eq(x).text(问题[n].a).数据('answer','a');
$(“.answer_holder”).eq(y).文本(问题[n].b).数据('answer','b');
$(“.answer_holder”).eq(z).text(问题[n].c).数据('answer','c');
}
$(文档).ready(函数(){
var n=0;
$('.answer_holder')。单击(函数(){
如果($(this).data('answer')=='a'){//或任何正确答案
n++;
如果(n<问题长度){
问题(n);
}否则{
//做点别的,测试就完成了
}
}
返回false;
});
问题(n);
});

请注意,我不是在比较
text()
函数,而是在比较
data()
函数。这是因为显示给用户的文本可能以某种方式进行了修饰,使得比较困难。只需使用答案索引“a”“b”或“c”更清楚。

为什么$(document).ready(函数(){在a()中)函数?它通常出现在所有函数之外(在全局范围内),因此它在加载页面时运行。这是您注册事件的地方,您希望它尽早运行。我还将函数名称从“a”(非描述性)更改为“setupQuestion()”(更具描述性)。谢谢你的帮助。如果我无法修复我的原始代码,我会尝试一下。这真的是一个答案,还是只是指出OP代码的一些问题?他在问为什么脚本会给他带来问题。我更喜欢解释问题,而不是为他编写正确的代码。我理解你的意思。我确实尝试过“阅读”哪一个问题以前曾单击过nswer,但我的脚本仍无法按预期工作。我可以为单击的答案的索引指定变量x,变量y是它应该的值(即随机生成的数字).我说如果x==y这样做,但它的行为不正常。谢谢你的回答,我很感激,但我将使用数据,而不是之前建议的文本。
function setupQuestion(n) {
    var x,y,z;

    x = Math.floor((Math.random() * 3))
    if(x == 0){y = 1; z = 2}else if(x == 1){y = 0; z = 2}else{y = 0; z = 1}

    $("#question_holder").text(questions[n].q);

    $(".answer_holder").eq(x).text(questions[n].a).data('answer', 'a');
    $(".answer_holder").eq(y).text(questions[n].b).data('answer', 'b');
    $(".answer_holder").eq(z).text(questions[n].c).data('answer', 'c');
}

$(document).ready(function() {
    var n = 0;
    $('.answer_holder').click(function() {
        if ($(this).data('answer') === 'a') { // Or whatever is the correct answer
            n++;
            if (n < questions.length) {
                setupQuestion(n);
            } else {
                // Do something else, the test is finished
            }
        }
        return false;
    });
    setupQuestion(n);
});