我正在使用PHP制作测验应用程序。现在问题甚至是它显示下一个按钮的最后一个问题,如图像
所示由于从db动态提取的问题,每个问题都没有页面。所以我无法指定它应该在什么时候隐藏下一个按钮(如果我有1000个问题怎么办)。我试过JavaScript。它似乎没有安静。
更新 Source code
答案 0 :(得分:1)
演示: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
。
<强> Offtopic 强>:
如果您想提高效果,请将所有document.getElementsByClassName
次调用存储在init()
内的变量中。这样你只需要做一次那些昂贵的电话。
答案 1 :(得分:0)
如果从数据库动态查询问题,结果集的大小应该是您的测验中显示的问题数量。然后,您可以使用javascript检查问题编号是否等于总问题的数量。如果不是,您可以显示下一个问题按钮。如果是,则用户在最后一个问题上,您不应该显示该按钮。
答案 2 :(得分:0)
我会尝试一下,但是因为我在工作而你的源代码没有任何承诺......好吧,不是立即透明。
1)在navbuttons中添加一个额外的类或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';
}
如果您愿意,可以详细说明,但这就是一般的想法。
答案 3 :(得分:0)
我不完全确定你的数据库结构,所以很难测试,但我相信一个子查询来获取每个测验的最后一个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
}