这个脚本给我带来了麻烦。我已经写了好几次但是我错过了什么。
'questions'数组指的是我的对象。这些对象是不同的问题,“a”始终是正确的答案。
到目前为止,脚本运行正常。我的想法是从0增加'n'以滚动我的数组,并在点击正确的答案时提供下一个问题。 'x'始终是正确的答案(它始终保持'a')。
所以我可以正确猜测增加'n'就好了;但是,当我再次调用函数'a()'时(在我的警报'hi'部分之后),它会导致问题。我想增加n,并调用一个(),所以我得到下一个问题。然后我想将正确的猜测(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'.*/
});
});
};
答案 0 :(得分:3)
你的逻辑在这里有点奇怪..你想要做的是每次a()运行时注册一个新的点击事件。我想你想为所有answer_holder
元素注册一个点击事件,并在事件处理程序中检查它是哪个元素并相应地处理它
请注意以下事项:
$(document).ready(function(){
- 这个处理程序中定义的函数应该在你的页面加载后运行..我不认为你想在一个()中使用它。它通常仅用于全局范围(在所有函数之外)
$(".answer_holder").eq(x).click(function(){
- 此事件处理程序根据x
的值注册您的函数。我建议您为所有$(".answer_holder")
注册一个事件处理程序,而不依赖于x
(在全局范围内)。在该事件处理程序(在函数中)中,您检查触发事件的元素(使用$(this)
- 它返回被单击的元素)
答案 1 :(得分:2)
你有$(document).ready()在错误的地方。尝试这样的事情(警告:这是完全未经测试的):
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);
});
请注意,我不是在text()
函数进行比较,而是在data()
函数进行比较。这是因为显示给用户的文本可能以某种方式进行修饰,使得比较变得困难。简单地使用答案索引“a”“b”或“c”就更清楚了。