需要测验应用程序一次只显示一个项目

时间:2018-05-30 10:28:34

标签: javascript php html mysql

我创建了一个测验应用程序,我希望应用程序在用户参加测验时一次显示一个问题。这个工作正常,直到我用超过5个问题填充数据库,现在测验显示所有问题,有人可以告诉我为什么会这样吗?

$(document).ready(function() {
    var steps = $('form').find(".questions");
    var count = steps.size();
    steps.each(function(i) {
        hider = i + count;

        if (count == i + 1) {
            var step = i + 1;
            $("#next" + step).on('click', submit);
        } else {
            $("#question_" + hider).hide();
            createNextButton(i);
        }

    });

    function submit() {
        $.ajax({
            type: "POST",
            url: "ajax.php",
            data: $('form').serialize(),
            success: function(msg) {
                $("#quiz_form,#demo1").addClass("hide");
                $('#result').show();
                $('#result').append(msg);
            }
        });
    }

    function createNextButton(i) {
        var step = i + 1;
        var step1 = i + 2;
        $('#next' + step).on('click', function() {
            $("#question_" + step).hide();
            $("#question_" + step1).show();
        });
    }
    setTimeout(submit, 50000);
});

PHP:

$response = $db->prepare("select * from questions WHERE test_ID = '" . $_POST['test_ID'] . "'");
$response->execute();

echo "<form method='post' id='quiz_form'>";

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$count = 1;

while($result=$response->fetch(PDO::FETCH_ASSOC)) {

1 个答案:

答案 0 :(得分:0)

对于初学者,您的hider变量将始终为您的点数+1。如果您有.size()个5个问题,那么(我会假设)第一次迭代应该隐藏,即

hider = i + count
hider = 0 + 5
hider = 5
$("#question_5").hide();

但是,如果您在PHP末尾w /零索引上生成问题,那么您的上一个问题(您的第5个),应该的ID为question_4

如您所见,您的hider变量永远不会少于5,每增加

steps.each(function(i) {
   hider = i + count;
   ...
});

hider只会从5增加到10(即#question_10),这在你的情况下不应该存在。

我想你只需使用

就能让事情更简单
$("#question_" + i).hide();