Отправить метод не вызывается, когда таймер достигает нуля в PHP с использованием JavaScript

1

Im создает образец веб-страницы викторины с использованием codeigniter. И в моем одном из представлений есть сценарий, где есть таймер, и когда он достигает нуля, форма должна быть представлена. Я пробовал код, и таймер работает, но когда он достигает нуля, вызов для отправки не выполняется, поэтому им не удается перейти к следующей странице. Но когда кнопка отправки нажата, все работает нормально. Ниже мой код. Может ли кто-нибудь помочь мне найти, где я ошибаюсь.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Test Your Knowledge</title>

        <script type="text/javascript">
            var totalsec = 50;
            var c_min = parseInt(totalsec / 60);
            var c_sec = parseInt(totalsec % 60);

            function CheckTime() {
                document.getElementById("timer").innerHTML = "Time left: " + c_min + " min " + c_sec + " sec ";

                if (totalsec <= 0) {
                    document.getElementById("difficultyForm").submit();
                } else {
                    totalsec = totalsec - 1;
                    c_min = parseInt(totalsec / 60);
                    c_sec = parseInt(totalsec % 60);
                    setTimeout("CheckTime()", 1000);
                }
            }
            setTimeout("CheckTime()", 1000);
        </script>

        <style type="text/css">

        </style>
    </head>
    <body>

        <div id="container">
            <h1>Welcome to Test Your Knowledge!!!</h1>

            <div id="body">
                <h2>Selected the difficulty level: Easy</h2>
                <div><span id="timer"></span></div>
                <form action="/AWT_CW1/index.php/ResultController/" method="POST" id="difficultyForm" name="difficultyForm">
                    <?php
                    foreach ($quesAnsList as $quesAns) {
                        echo '<question>';

                        echo '<strong>' . $quesAns->question . '</strong>';
                        echo '<br>';

                        echo '<input type="radio" name="' . $quesAns->answer_id . '" value="' . $quesAns->answer1 . '">' . $quesAns->answer1 . ' <br>';
                        echo '<input type="radio" name="' . $quesAns->answer_id . '" value="' . $quesAns->answer2 . '">' . $quesAns->answer2 . ' <br>';
                        echo '<input type="radio" name="' . $quesAns->answer_id . '" value="' . $quesAns->answer3 . '">' . $quesAns->answer3 . ' <br>';

                        echo '</question>';
                    }
                    ?>
                    <input type="submit" name="submit" value="Submit">
                </form>
            </div>
        </div>
    </body>
</html>

Примечание. Меня попросили не использовать jquery или ajax для этого проекта. Заранее спасибо.

  • 2
    setTimeout ожидает функцию, а не строку
  • 1
    Также, если вы хотите запускать функцию через каждую секунду, используйте setInterval
Показать ещё 2 комментария
Теги:
codeigniter
timer

2 ответа

2
Лучший ответ

Почему ваш код не работает

Это потому, что вы назвали кнопку отправки "submit", переопределяя функцию submit().

Как вы можете исправить проблему

Вы можете исправить это, заменив

<input type="submit" name="submit" value="Submit">

С

<input type="submit" name="submit_button" value="Submit">

Пожалуйста, имейте в виду, что...

Как отметил @Rajesh в комментариях, setTimeout ожидает функцию как первый аргумент, в то время как вы предоставляете строку. Заменить setTimeout("CheckTime()", 1000); с

setTimeout(function(){
  CheckTime();
}, 1000);
  • 1
    большое спасибо. Оно работает. Я понятия не имел, что такое понятие выхода. Спасибо, что узнал что-то новое.
  • 0
    @Vithushan рад, что смог помочь :)
Показать ещё 4 комментария
2

SetTimeout

Вызывает функцию или выполняет фрагмент кода после указанной задержки.

Синтаксис: setTimeout(function(), delay);

setInterval

Неоднократно вызывает функцию или выполняет фрагмент кода с фиксированной временной задержкой между каждым вызовом. Возвращает интервалID.

Синтаксис: setInterval(function(),interval)

setInterval Выполнение вашего кода

JSFiddle.

Для целей моделирования я уменьшил таймер до 10 секунд.

(function () {
    var totalsec = 10;
    var interval = null;

    function CheckTime() {
        document.getElementById("timer").innerHTML = "Time left: " + parseInt(totalsec / 60) + " min " + (totalsec % 60) + " sec ";

        if (totalsec <= 0) {
            window.clearInterval(interval)
            document.getElementById("difficultyForm").submit();
        } else {
            totalsec--;
        }
    }

    function initInterval() {
        interval = setInterval(function () {
            CheckTime()
        }, 1000);
    }
    initInterval();
})()
<span id="timer"></span>

<form id="difficultyForm">
</form>
  • 0
    Спасибо за код. Этот код более эффективен, чем то, что я пытался. Большое спасибо за ваше время. Действительно ценю это....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню