javascript - 当我在自身内部调用函数时,来自 Math.random 的值会导致问题

标签 javascript jquery

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

“问题”数组指的是我的对象。这些对象是不同的问题,“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'.*/
        });
    });
};

最佳答案

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

注意以下几点:

$(document).ready(function(){ - 此处理程序中定义的函数应该在您的页面加载后运行。我认为您不想在内部使用它a(). 通常只在全局作用域(所有函数外)使用

$(".answer_holder").eq(x).click(function(){ - 此事件处理程序根据 x 的值注册您的函数。我建议您为所有 $(".answer_holder") 注册一个事件处理程序,而不依赖于 x(在全局范围内)。在该事件处理程序内部(在函数),你检查哪个元素触发了事件(使用 $(this) - 它返回被点击的元素)

关于javascript - 当我在自身内部调用函数时,来自 Math.random 的值会导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671720/

相关文章:

Javascript - 如果 cookie 存在,则有条件地将复选框添加到 php 页面

javascript - jQuery 延迟 fadeIn 花费的时间比预期的要长

javascript - 单击时切换按钮的文本

javascript - Bootstrap 和自定义下拉菜单

javascript - 在子组件中将多个 this.props 属性分配给新变量一次时出错

javascript - jQuery 验证 select2

javascript - 以一个函数定位多个元素

javascript - 尝试使用 Node.js 将输入数据存储在 json 文件中

jquery - 使用 $.ajax 调用服务器端函数

javascript - 重新创建或更改推特按钮的参数