@edu2001
Начинающий верстальщик

Как сделать два квиза?

Всем привет.Не силен в js и jquery,но пришлось сделать квиз,кое как признаюсь честно нашел и внедрил код к себе.Но этот код почему то не работает когда на сайте два квиза,работает только когда она одна
Как можно этот вопрос решить??
var steps = [false, false, false, false, false,false,false,false];
var curr_step = 0;

// переходы по шагам
function to_step(index, need_push) {
    curr_step = index;
    for (var i = 0; i < steps.length; i++) {
        if (!$("#step" + i).is(':hidden')) {
            $("#step" + i).hide();
        }
    }
    $("#step" + index).show();

    $("#progress_in").css({width: (100 * index / steps.length) + "%"});
    $("#curr_step").text("Шаг " + index + " из " + (steps.length - 1));

    // Разделение на #step0, #other_steps и #last_step
    if (index + 1 == steps.length) { // если шаг равен общему количеству шагов
        if (!$("#other_steps").is(':hidden')) {
            $("#other_steps").hide();
            $("#last_step").show();
        }
    } else if (index > 0) { // если шаг больше ноля
        if ($("#other_steps").is(':hidden')) {
            $("#other_steps").show();
        }
        if (!$("#last_step").is(':hidden')) {
            $("#last_step").hide();
        }
    } else if (!$("#other_steps").is(':hidden')) { // если шаг равен нолю
        $("#other_steps").hide();
    }
}


// Проверка заполненности радиокнопки или чекбокса
function check_radio_selected(elem_id, error_message) {
    obj = $('input[name="' + elem_id + '"]:checked');
    if (!(obj.length && obj.val())) {
        alert(error_message);
        return false;
    }
    return true;
}

// Проверка E-mail
function validateEmail($email) {
    var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
    return emailReg.test($email);
}

// Проверки полей по шагам и уведомления при незаполненных полях
(function ($) {

    $(document).ready(function () {
        to_step(0, true);
    }); // задаем первоначальный индекс
    $("#to_step1").click(function (event) {
        event.preventDefault();
        to_step(1, true);
    });
    $("#to_step2").click(function (event) {
        event.preventDefault();
        if (check_radio_selected("type-home", "Укажите Сумму")) {
            to_step(2, true);
        }
    });
    $("#to_step3").click(function (event) {
        event.preventDefault();

        var checked = $("#type-repair input:checked").length > 0;
        if (!checked) {
            alert("Укажите возраст ребенка");
            return false;
        } else {
            to_step(4, true);
        }

        /*if (check_radio_selected("type-repair", "Укажите какой ремонт необходим"))	{
            to_step(4, true);
        }*/
    });
    $("#to_step5").click(function (event) {
        event.preventDefault();
        if (check_radio_selected("design-project", "Укажите цель?")) {
            to_step(5, true);
        }
    });
    $("#to_step6").click(function (event) {
        event.preventDefault();
        if (check_radio_selected("design-project", "Укажите цель?")) {
            to_step(6, true);
        }
    });
    // Отправка формы (нажатием на финальную кнопку)
    $("#to_submit").click(function (event) {
        event.preventDefault();
        $("#quiz_form").submit();
    });
    // Проверка телефона и ПК при отправке формы
    $('#quiz_form').submit(function () {
        var name = $.trim($(this).find('input[name="name_input"]').val());
        var phone = $.trim($(this).find('input[name="phone"]').val());
        if (name === '') {
            alert('Заполните поле с именем');
            return false;
        }
        if (phone === '') {
            alert('Заполните поле с номером телефона');
            return false;
        } else if (phone.length < 8) {
            alert('Слишком короткий номер');
            return false;
        } else if (!((phone.lastIndexOf("+7", 0) === 0) || (phone.lastIndexOf("8", 0) === 0))) {
            alert('Введите корректный номер в формате +79998887766 или 89998887766');
            return false;
        }
    });
    // для возврата к предыдущему вопросу
    window.addEventListener("popstate", function (e) {
        var step = 0;
        if (e.state) {
            step = e.state.step_x;
        }
        to_step(step);
    });
})(jQuery);
$(document).ready(function () {

    jQuery('body').on('change', '#quiz_form', function () {

        // Обводка для label input[type=radio]
        $('input[type=radio]').each(function () {
            if ($(this).is(':checked')) {
                $(this).parent('label').addClass('checked');
            } else {
                $(this).parent('label').removeClass('checked');
            }
        });

        // Обводка для label input[type=checkbox]
        $('input[type=checkbox]').each(function () {
            if ($(this).is(':checked')) {
                $(this).parent('label').addClass('checked');
            } else {
                $(this).parent('label').removeClass('checked');
            }
        });

    });



});
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
@Aricus
Как я понимаю, они не просто на одном сайте, но и на одной странице? Проще всего - поместить на другую страницу.

Вот тут
var steps = [false, false, false, false, false,false,false,false];
var curr_step = 0;

Задаются параметры квиза. Соответственно, нужно создать второй экземпляр этих параметров (с другими названиями), а в функциях, которые их используют, задать дополнительный параметр - id квиза.

Ну или тупо скопировать весь этот код (кроме обводки), и переименовать глобальные переменные и функции. Не слишком технологично, но должно работать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы