我正在使用 PHP 制作一个测验应用程序。现在问题甚至是最后一个问题,它显示下一个按钮,如图所示
由于问题是从 db 动态获取的,因此每个问题都没有页面。所以我无法指定它应该在什么时候隐藏下一个按钮(如果我有 1000 个问题怎么办)。我已经尝试过使用 JavaScript。它似乎不起作用。
更新 源代码
我正在使用 PHP 制作一个测验应用程序。现在问题甚至是最后一个问题,它显示下一个按钮,如图所示
由于问题是从 db 动态获取的,因此每个问题都没有页面。所以我无法指定它应该在什么时候隐藏下一个按钮(如果我有 1000 个问题怎么办)。我已经尝试过使用 JavaScript。它似乎不起作用。
更新 源代码
演示:http: //jsfiddle.net/e4Ny6/2/
利用
var numQuestions,
navs;
function init() {
cd();
numQuestions = document.getElementsByClassName("qButton").length;
navs = document.getElementsByClassName('navbutton');
show(0);
}
function show(i) {
document.getElementsByClassName("current")[0].className="qButton";
document.getElementsByClassName("active")[0].className="qPanel";
document.getElementsByClassName("qPanel")[i].className+=" active";
document.getElementsByClassName("qButton")[i].className+=" current";
navs[0].style.display = i===0 ? 'none' : '';
navs[1].style.display = i===numQuestions-1 ? 'none' : '';
currentQuestion=i;
}
...而不是你的函数init
和show
.
题外话:
如果要提高性能,请将所有document.getElementsByClassName
调用存储在内部变量中init()
。这样,您只需进行一次昂贵的调用。
我会试一试,但没有承诺,因为我在工作,而且你的源代码......嗯,不是立即透明的。
1) 向导航按钮添加一个额外的类或 id:
<a id='previousbutton' class='navbutton' onclick='nav(-1)'>« Previous Question</a>
<a id='nextbutton' class='navbutton' onclick='nav(1)'>Next Question »</a>
2)页面加载检查索引时函数if
末尾的简单语句show
var cnt = document.getElementsByClassName("qButton").length-1;
if(i === cnt){
document.getElementById('nextbutton').style.display = 'none';
} else {
document.getElementById('nextbutton').style.display = 'block';
}
如果您愿意,您可以详细说明它,但这是一般的想法。
我不完全确定您的数据库结构,因此很难测试,但我相信获取每个测验的最后一个 id 的子查询将为您提供所需的内容。
SELECT questions.*,
/* Add subquery to get last id */
(SELECT MAX(qid) FROM questionsforquiz WHERE questionsforquiz.quizId = $quizId) as last_id
FROM questions
JOIN questionsforquiz
ON questions.qid = questionsforquiz.qid
WHERE questionsforquiz.quizId = $quizId
ORDER BY RAND()
现在您可以简单地检查当前问题是否qui
是MAX(qid)
,如果是,则禁用导航按钮。
if($qId == $last_id) {
// print disabled nav button
} else {
// print active nav button
}
如果问题是从数据库中动态查询的,则结果集的大小应该是测验中将显示的问题数。然后,您可以使用 javascript 检查问题数是否等于总问题数。如果不是,您可以显示下一个问题按钮。如果是,那么用户在最后一个问题上,您不应该显示该按钮。