Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2013, 21:43
Новичок на форуме
Отправить личное сообщение для ATNC Посмотреть профиль Найти все сообщения от ATNC
 
Регистрация: 10.04.2013
Сообщений: 4

Таймер. функция
Добрый день. Есть задача: сделать мини-тест, ответы на вопросы только "Да", "Нет" (реализуется через confirm), сами вопросы находятся в массиве. Если ответа нету в течении 25 секунд- считать его негативным. Как сделать так, чтобы по истечению 25 секунд, выбирался следующий вопрос из массива? Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2013, 22:06
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

если использовать prompt, тогда придётся ждать, пока пользователь не прореагирует как-нибудь. выход - юзать UI библиотеки или сделать модальное окно самому
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2013, 22:17
Новичок на форуме
Отправить личное сообщение для ATNC Посмотреть профиль Найти все сообщения от ATNC
 
Регистрация: 10.04.2013
Сообщений: 4

вопросы подразумевают только логические ответы: да или нет. Тоесть вопросы задаются с помощью confirm, prompt не нужно.

Например: Берется с массива вопрос. Выводится с помощью confirm. Включается таймер на 25 с. Если пользователь не ответит в течении этого времени, его ответ считается как негативный. Берется следующий вопрос с массива.... и т.д.

Последний раз редактировалось ATNC, 10.04.2013 в 22:21. Причина: Добавил пояснение
Ответить с цитированием
  #4 (permalink)  
Старый 10.04.2013, 22:38
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

confirm, prompt, alert - блокируют выполнение кода. Таймер не будет работать. Создайте свое модальное окно и проблем не будет.
Ответить с цитированием
  #5 (permalink)  
Старый 10.04.2013, 23:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

отрисовка и ответ на вопрос проиходит в методе QuestionMaster.renderQuestion

// первый аргумент - содержание вопроса (текст)
// второй - функция обратного вызова. см. ниже.
QuestionMaster.renderQuestion : function (  questionText, callback  )

// функция должна выполниться, когда пользователь ответит на вопрос
// (чтобы выводить через HTML элементы, с\без анимации)

// первым аргументом к ф-и должно быть логическое значение, говорящее об ответе на вопрос
callback: function (answered)


var QuestionMaster = {

    data: [],

    Question: function (text) {
        this.text = text + '';
        this.value = false;
    },

    index: -1,
    
    timeout: 25 * 1e3,

    locked: false,

    insert: function (text) {
        if (text instanceof Array) {
            var i = text.length;
            while ( i-->0 ) this.insert( text[i] );
        } else {
            var question = new this.Question(text);
            this.data.push(question);
        }
    },

    current: function () {
        return this.data[ this.index ];
    },

    next: function () {
        return this.data[ this.index++ ];
    },

    prev: function () {
        return this.data[ this.index-- ];
    },

    ask: function () {
        var question = this.current();
        if (!this.locked && question) {
            question = this.current();
            var self = this;
            this.locked = true;
            var askedTimestamp = new Date().valueOf();
            this.renderQuestion(question.text, function (answered) {
                self.locked = false;
                 var answeredTimestamp = new Date().valueOf();
                var timedOut = (answeredTimestamp - askedTimestamp) >= self.timeout;
                question.value = timedOut ? false : !!answered;
            });
        }
    },

    askNext: function () {
        this.next();
        this.ask();
    },

    renderQuestion: function (questionText, callback) {
        var answered = window.confirm(questionText);
        callback(answered);
    },

    iterate: function (callback) {
        var i = this.data.length, question;
        while ( i-->0) {
            question = this.data[ i ];
            callback(question.text, question.value);
        }
    }
    
};


QuestionMaster.insert("Хочешь пивка?");
QuestionMaster.insert([ "Хочешь рыбку?", "Хочешь учиться?", "Сейчас на улице темно?" ]);

QuestionMaster.next();
QuestionMaster.ask();

while (QuestionMaster.current()) QuestionMaster.askNext();

QuestionMaster.iterate(function (question, answered) {
    alert(question + " \n\nОтвет: " + (answered ? "Да":"Нет") );
});

Последний раз редактировалось melky, 10.04.2013 в 23:33.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как таймер заставить работать поочерёдно вызываю одну и ту же функцию два раза? JavaScriptProgrammer Events/DOM/Window 12 08.11.2012 23:41
Зацикленный таймер jacko Общие вопросы Javascript 2 01.07.2012 14:32
функция и несуществующий id Ankh Элементы интерфейса 4 10.02.2012 23:49
Таймер для слайдера (jQuery) RamPi Events/DOM/Window 0 23.05.2011 14:52
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47