Невозможно скрыть div с помощью условия в javascript

Я создал веб-сайт с викториной, где вопросы загружаются из базы данных по одному. В конце всех вопросов отображается оценка. Я создал таймер, как показано ниже:

var tim;
var min = 25;
var sec = 01;
var f = new Date();

function f1() {
    f2();
    document.getElementById("starttime").innerHTML = "You Started Your Exam At " + f.getHours() + ":" + f.getMinutes();
}

function f2() {
    if (parseInt(sec) > 0) {
        sec = parseInt(sec) - 1;
        document.getElementById("showtime").innerHTML = "Time Left :<br>" + min + " Minutes ," + sec + " Seconds";
        tim = setTimeout("f2()", 1000);
    } else {
        if (parseInt(sec) == 0) {
            min = parseInt(min) - 1;
            if (parseInt(min) == 0) {
                clearTimeout(tim);
                location.href = "score.php";
            } else {
                sec = 60;
                document.getElementById("showtime").innerHTML = "Time Left :<br>" + min + " Minutes ," + sec + " Seconds";
                tim = setTimeout("f2()", 1000);
            }
        }
    }
}
setTimeout(function() {
    alert("5 minutes remaining");
}, 1200000);
<div class = "zara">
    <form align = "center" id = "form1" runat = "server">
        <div>
            <table width = "100%" align = "center">
                <tr>
                    <td colspan = "2">
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class = "col_third end">
                            <div class = "hover panel">
                                <div class = "front">
                                    <div class = "box1">
                                        <p>
                                            <div id = "showtime"></div>
                                        </p>
                                    </div>
                                </div>
                                <div class = "back">
                                    <div class = "box2">
                                        <p>
                                            <div id = "starttime"></div>
                                        </p>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <!-- <div id = "starttime"></div><br /> -->
                        <div id = "endtime"></div><br />
                        <!-- <div id = "showtime"></div> -->
                    </td>
                </tr>
                <tr>
                    <td>
                        <br />
                    </td>
                </tr>
            </table>
            <br />
        </div>
    </form>
</div>

Оценка отображается на той же странице с использованием ajax, и я выполнил следующий сценарий, если все вопросы остались позади:

if ($number_of_all_questions <=$ _POST[ 'next_id']){ // Quiz finished, show results echo
  "<div>
   <h2>Results:</h2>
    <p>Your score is: {$_SESSION['correct_score']} out of 25</p>
      <script>
      $('button[onclick='getPreQuestion()']').hide();
    $('.zara').hide();
    </script>
  </div>";
}

Все работает нормально, но div таймера не скрыт. Я хочу скрыть div таймера, когда отображается счет / когда все вопросы закончены.

Есть ли ошибка?

proofzy 18.06.2018 12:50

ошибка не отображается

user9728944 18.06.2018 12:55

Вы должны получить ошибку в консоли. У вас неправильный синтаксис в строке $ ('button [onclick =' getPreQuestion () ']'). Hide (); Это должно быть $ ('button [onclick = "getPreQuestion ()"]'). Hide ();

Sabik 18.06.2018 13:04

@Sabik, эта линия работает нормально. но div "zara" не скрывается

user9728944 18.06.2018 13:06

Если этот последний фрагмент кода поступает из ajax-вызова, он никогда не запустится.

Michel 18.06.2018 13:12

$ ('. zara'). скрыть (); этот код не работает. это происходит из вызова ajax

user9728944 18.06.2018 13:13

@Michel, тогда как я могу это скрыть?

user9728944 18.06.2018 13:13

@proofzy, я не понял. какая страница

user9728944 18.06.2018 13:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
96
3

Ответы 3

Ради всего святого, научитесь упрощать вопросы только до сути, а не просто сбрасывать весь код. Нам было бы намного проще и быстрее ответить!

Просто измените кнопку отправки на отправку формы или что-то еще. Я не собираюсь разбирать весь этот код сам (извините). Это должно служить рабочим шаблоном

 var inv = document.getElementById('invisiblediv');
 var submitb = document.querySelector('button');
 
 submitb.addEventListener('click',function(){
  alert('Submitted form in time!');
  inv.style.visibility = 'visible';
  clearTimeout(testtimer);
 });
 
 var testtimer = setTimeout(function(){
    alert('Time limit expired, showing results!');
    inv.style.visibility = 'visible';
 }, 8000);
#invisiblediv {
  visibility: hidden;
  border: 1px solid black;
  padding: 2px;
  margin-bottom: 10px;
}
<div id = "invisiblediv">Hello world!</div>
<button>Show hidden results</button>

это не тот ответ, который я хочу

user9728944 18.06.2018 13:10

Убедитесь, что ваш javascript выполняется после включения jQuery.

Попробуйте так:

<?php
    if ($number_of_all_questions <= $_POST[ 'next_id']){ // Quiz finished, show results 
    echo "<div>
        <h2>Results:</h2>
        <p>Your score is: {$_SESSION['correct_score']} out of 25</p>
        </div>"; 
    $finished = 1;
    }
?>


    <script>
    // let's store it from php variable to javascript
    var finished = "<?php echo $finished; ?>";
    $(document).ready(function(){
        if (finished === 1) {
           $('.zara').hide();
        }
    });
    </script>

синтаксическая ошибка, неожиданный '_POST' (T_STRING), ожидаемая переменная (T_VARIABLE) или '{' или '$'

user9728944 18.06.2018 13:12

синтаксическая ошибка, неожиданный '<', ожидается конец файла в

user9728944 18.06.2018 13:15

Het получает это как ответ от ajax-вызова, поэтому, если он не использует eval(), он никогда не запустится.

Michel 18.06.2018 13:22

это все еще ошибка. код неправильно отформатирован

user9728944 18.06.2018 13:26

синтаксическая ошибка, неожиданный '<', ожидается конец файла в

user9728944 18.06.2018 13:29

Ваш скрипт никогда не запустится, если вы получите его в ответ на ajax-вызов, если только вы не используете какой-нибудь злой eval().

Создайте функцию с именем hide() и загрузите ее обычным JavaScript:

function hide{
   $('button[onclick='getPreQuestion()']').hide();
   $('.zara').hide();
}

В вашем PHP только эхо div:

<?php
if ($number_of_all_questions <=$ _POST[ 'next_id']){
 echo "<div>
    <h2>Results:</h2>
    <p>Your score is: {$_SESSION['correct_score']} out of 25</p>
    </div>";
 }

и в вашем ajax-коде найдите подсказку, что игра закончилась. Что-то вроде (я не очень разбираюсь в jQuery, поэтому здесь могут быть ошибки):

$.ajax({
  ....,
  success: function(result){
        //search for the word 'Results:'. This will return -1 if not found
        var n = result.search("Results:");
        //If the word is found, run function hide() 
        if (n>=0)hide();
       },
  ....
});

Другие вопросы по теме