Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Прошу помощи. Отобразить и скрыть карточки тестов (https://javascript.ru/forum/events/38944-proshu-pomoshhi-otobrazit-i-skryt-kartochki-testov.html)

Quality3011 09.06.2013 14:28

Прошу помощи. Отобразить и скрыть карточки тестов
 
Добрый день всем форумчанам.
Написал сайт тестов на РНР, все прекрасно работает, но у меня стала одна проблема которую уже несколько дней решить не могу. Т.к в JS не могу ничего понять...

Задача стоит такая:
1. Есть 100 вопросов, они все загружаются на страницу при переходе на нее (они все невидимые(спрятаны))
2. При старте страницы код JS начиная с 1го вопроса проверяет есть ли на этом вопросе маркер=1 (значит отвечен), если ответа не было показывает "вопрос 1" и т.д
3. Есть 2 кнопки Пропустить и Следующий, при нажатии на кнопку следующий текущему вопросу присваивается маркер=1 (значит уже отвечен) и код проверяет следующий вопрос, если его маркер 0 - не отвечен, показывает его.
4. Когда доходит до 100го вопроса код начинается сначала...

Надеюсь понятно объяснил задачу... Позже я могу привести код своих "жалких" попыток это реализовать, возможно вы сможете подсказать какие ошибки в нем и как лучше стоит это сделать...
Но возможно кто-то поможет с написанием. Благодарю.

Quality3011 09.06.2013 22:11

Спасибо всем кто откликнулся (т.е никому!). Отдельное тому человеку который поставил -10. Наверное он силен в JS поэтому смогу оставить лишь кривой комент к моему сообщению и эти жалкие "-10" к карме.

Привожу рабочий код: (Возможно кому нибудь пригодится)

$tab='tab'.$i; // отрывок из кода вопросы создаем циклом: каждому табу присваиваем имя+номер
if ($i==1) {$display="display:block";}  else {$display="display:none";} // на старте скрываем все кроме 1го

<div style="$display;" id="$tab" > //

// Контейнер для вопроса

<input type="hidden" id="setup_$tab" value='0'>	//  для отметки вопроса на который уже ответили

<input type='button' onclick="skip($i);" value="Пропустить" />
<input type='button' onclick="next($i);" value="Следующий" />

</div>


var i=0;
var tab=1;

function hide(prev,next){
document.getElementById(prev).style.display='none';
document.getElementById(next).style.display='block';
}

function next(tab) {
i++
var	tab_setup_this = 'setup_tab'+ (tab);
document.getElementById(tab_setup_this).value = 1;

	if (i==8){
	document.test_form.submit();
	}
	else
	{
	var getThisTab = (function(tab){
	var counter = tab;
	
		for (n=tab; n<=10;n++){ // Кол-во вопросов +2 чтоб не вылететь из цикла на последнем вопросе
		if (n==9) { n = 1; counter=1;} // на последнем вопросе начинаем перебор сначала
		var	tab_setup_this = 'setup_tab'+ (n);
		if (document.getElementById(tab_setup_this).value == 0){break};
		counter++;	
		}
	return(counter);
	});	
	
	var tab_part1 = 'tab'+ tab;
	var tab_part2 = 'tab' + (getThisTab(tab));
	hide(tab_part1,tab_part2);

	}
}

function skip(tab) {
tab++;

	var getThisTab = (function(tab){
	var counter = tab;
	
		for (n=tab; n<=10;n++){
		if (n==9) {
		n = 1;
		counter=1;}
		var	tab_setup_this = 'setup_tab'+ (n);
		if (document.getElementById(tab_setup_this).value == 0){break};
		counter++;	
		}
	return(counter);
	});	
	var tab_part1 = 'tab'+ (tab - 1) ;
	var tab_part2 = 'tab' + (getThisTab(tab));
	hide(tab_part1,tab_part2);
}

dmitriymar 09.06.2013 22:32

Цитата:

Сообщение от Quality3011
Спасибо всем кто откликнулся (т.е никому!).

а правила не для вас писаны ? особенно пункт 5?
http://javascript.ru/forum/misc/3706...-otvetili.html

Quality3011 09.06.2013 23:32

Я был на работе, а код дома. Я об этом написал в первом посте!

Цитата:

а правила не для вас писаны ? особенно пункт 5?
Как спросить, чтобы вам ответили

рони 10.06.2013 01:16

:write: Вариант для любого массива вопросов ... в данном случае 10 ... строка 27
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
   <style type="text/css">
   .hide, .ok{
     display: none;
   }
   .show {
     display: block;
   }
     </style>
    <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
  <script>
$(function () {
    function d() {
        var b;
        a.next("div.hide").size() ? b = a.next("div.hide") : $("div.hide:first").size() ? b = $("div.hide:first") : ($("button").hide(), b = $("<div/>", {
            text: "Вопросов нет"
        }), c.append(b));
        a = b;
        a.addClass("show")
    }
    var c = $("<div/>"),
        a;
    $.each(Array(10), function (a) {
        c.append($("<div/>", {
            text: "Вопрос № " + ++a,
            "class": "hide"
        }))
    });
    $("<button/>", {
        text: "Пропустить",
        click: function () {
            a.removeClass("show");
            d()
        }
    }).appendTo(c);
    $("<button/>", {
        text: "Следующий",
        click: function () {
            a.removeClass("show hide").addClass("ok");
            d()
        }
    }).appendTo(c);
    $("body").append(c);
    a = $("div.hide:last");
    d()
});
  </script>
</head>
<body>
</body>
</html>


Часовой пояс GMT +3, время: 01:25.