这个脚本给我带来了问题。我已经重写了好几次,但我遗漏了一些东西。
“问题”数组指的是我的对象。这些对象是不同的问题,“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/