1

我正在使用 PHP 制作一个测验应用程序。现在问题甚至是最后一个问题,它显示下一个按钮,如图所示测验

由于问题是从 db 动态获取的,因此每个问题都没有页面。所以我无法指定它应该在什么时候隐藏下一个按钮(如果我有 1000 个问题怎么办)。我已经尝试过使用 JavaScript。它似乎不起作用。

更新 源代码

4

4 回答 4

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;
}

...而不是你的函数initshow.

题外话

如果要提高性能,请将所有document.getElementsByClassName调用存储在内部变量中init()。这样,您只需进行一次昂贵的调用。

于 2013-09-03T18:48:58.307 回答
0

我会试一试,但没有承诺,因为我在工作,而且你的源代码......嗯,不是立即透明的。

1) 向导航按钮添加一个额外的类或 id:

<a id='previousbutton' class='navbutton' onclick='nav(-1)'>&laquo; Previous Question</a>
<a id='nextbutton' class='navbutton' onclick='nav(1)'>Next Question &raquo;</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';
}

如果您愿意,您可以详细说明它,但这是一般的想法。

于 2013-09-03T18:28:22.277 回答
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()

现在您可以简单地检查当前问题是否quiMAX(qid),如果是,则禁用导航按钮。

if($qId == $last_id) {
    // print disabled nav button
} else {
    // print active nav button
}
于 2013-09-03T18:52:16.640 回答
0

如果问题是从数据库中动态查询的,则结果集的大小应该是测验中将显示的问题数。然后,您可以使用 javascript 检查问题数是否等于总问题数。如果不是,您可以显示下一个问题按钮。如果是,那么用户在最后一个问题上,您不应该显示该按钮。

于 2013-09-03T18:01:23.877 回答