• Как сделать тест?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Типа дерева
    Если "типа дерева", то в моем понимании - вопросы должны храниться в каком-то объекте. Вроде такого:
    var q = {
        'Question 1' : {
            'Yes' : {
                'Question 1.1' : {
                    'Yes' : 'Result',
                    'No' : { /* ... */ }
                }
            },
            'No' : {
                'Question 1.2' : { /* ... */ }
            }
        }
    };
    Этот момент вы не указали, но если я угадал, то вариант может быть таким - jsfiddle.net/77ooxgwv
    var q = {
        'Вы ненормальный?': {
            1: 'Windows Phone',
            0: {
                'Вы гей?': {
                    1: 'Apple',
                    0: {
                        'Цвет смартфона розовый?': {
                            1: 'Apple',
                            0: 'Android'
                        }
                    }
                }
            }
        }
    },
    tmpl = '<p>@</p><input type="radio" name="ans" value="1">Да <input type="radio" name="ans" value="0">Нет',
    cur = q[Object.keys(q)[0]],
    out = $('output').html(tmpl.replace(/@/, Object.keys(q)[0]));
    
    out.on('change', ':radio', function () {
        cur = cur[$(this).val()];
        if (typeof cur === 'string') {
            out.html('Вам подойдёт <b>' + cur + '</b><br>Тест окончен!');
        } else {
            out.html(tmpl.replace(/@/, Object.keys(cur)[0]));
            cur = cur[Object.keys(cur)[0]];
        }
    });
    Ответ написан
    Комментировать
  • Как отформатировать дату в javascript?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    var d = new Date('Fri Oct 02 2015 00:45:59 GMT+0300 (EEST)');
    
    var formatDate = ('0' + d.getDate()).slice(-2) + '/' + ('0' + (d.getMonth() + 1)).slice(-2) + '/' + d.getFullYear() + ' ' + ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2) + ':' + ('0' + d.getSeconds()).slice(-2);
    
    console.log(formatDate); // 02/10/2015 00:45:59

    P.S. Я тут подумал, а что вам мешает сразу при запросе форматировать дату? В MySQL - это функция DATE_FORMAT()
    SELECT DATE_FORMAT(`my_date_column`, '%d/%m/%Y %H:%i:%s') AS `foramt_date` FROM `my_table`;
    Ответ написан
    1 комментарий
  • Сворачивающийся\разворачивающийся блок в TinyMCE или аналоге?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Ни в TinyMCE, ни в другом известном мне редакторе "из коробки", нет возможности реализовать то, что вы хотите. Точнее реализовать можно, но своими усилиями - дописать расширение/надстройку, которая будет добавлять некий html-сниппет, например, как в примере по приведенной вами ссылке. Вот вам такой пример. По нажатию на кнопку (я её там единственную оставил), добавляется html-код в редактор. На странице же вам нужно будет только подключить JS и CSS плагина Сollapse.

    P.S. Я с TinyMCE практически не знаком ( в отличии от вас ;)) ), поэтому вполне возможно, что там есть и более удобные методы API для реализации задуманного.
    Ответ написан
    Комментировать
  • Как заставить код читать ответ сервера?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Ответ с сервера вам приходит в виде строки. Если вам нужно передать массив/объект, то предварительно его нужно преобразовать в строку, а если точнее, то в строку формата JSON. В PHP за это отвечает функция json_encode(). Получив такую json-строку на клиенте, вам надо сделать обратное преобразование, распарсить эту строку:
    var data = JSON.parse(xhr.responseText);
    Ответ написан
    3 комментария
  • Как передать параметру функции произвольное количество аргументов?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Может такой вариант подойдёт?
    Array.prototype.destroyer = function(a) {
        return this.filter(function(v) {return a.indexOf(v) < 0;});
    };
    var z = ["tree", "hamburger", 53].destroyer(["tree", 53]);
    console.log(z); // "hamburger"
    Ответ написан
    Комментировать
  • Почему значение marginLeft не изменяется?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Ответ так и напрашивается: "Потому, что так написан сценарий" - при движении мыши, установить свойству "margin-left" значение "20px". Не изменять это значение при каждом движении по какому-то алгоритму, а просто статично установить и всё. Хорошо бы было узнать, какой результат вы ожидаете?

    Хорошо, не буду вас мучить... В цикле, где вы пытаетесь изменять значение, выведите в консоль "slide.style.marginLeft". Есть два варианта того, что вы увидите при первом срабатывании: или же пустую строку или же уже установленное значение, которое было прописано в атрибуте style, например, "30px". Если строка пустая, то "" + "20px" == "20px", если же значение, то "30px" + "20px" == "30px20px". В последнем случае, по крайней мере современные браузеры, проигнорируют некорректное значение. Выход: или же заранее прописать какое-то значение в атрибуте style у этих элементов, или же в цикле, где вы устанавливаете обработчики событий onmousedown и onmouseup, добавить такое значение, например, slides[i].style.marginLeft = 0;, или же использовать метод getComputedStyle(), когда надо подхватить значения, прописанные в CSS и не забывать полученное текущее значение приводить к числовому типу
    slide.style.marginLeft = (parseInt(slide.style.marginLeft, 10) + 20) + "px";
    Ответ написан
    Комментировать
  • Почему хорошо не работает last() функция в jquery?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Ответ вам, собственно, уже дал Виталий Инчин ☢ , но можно немного оптимизировать
    var list = $('li'), last = list.length - 1, indx = 0, dir = {40: 1,38: -1};
    $('body').on('keyup', function (e) {
        indx = list.index(list.filter('.select'));
        list.eq( list.eq(indx + dir[e.which]).length ? indx + dir[e.which] : (e.which ? 0 : last)).addClass('select');
        list.eq(indx).removeClass('select');
    });
    Ответ написан
    Комментировать
  • Как динамически изменять высоту iframe?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    var d = document;
    
    d.addEventListener('DOMContentLoaded', function(){
    
    	var frame = d.getElementById('ifr'), // ваш iframe
    	MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
    	observer = new MutationObserver(function (mutations) {
    		resizeIframe(frame);
        }),
    	config = {
    		attributes: true,
    		childList: true,
    		characterData: true,
    		subtree: true
    	};
    	frame.addEventListener('load', function(){
    		observer.observe(this.contentDocument.body, config);
    		resizeIframe(this);	
    	}, false);
    	
    }, false);
    
    	
    function resizeIframe(o){
    	o.style.height = o.contentDocument.body.scrollHeight + 'px';	
    }
    Только надо учитывать, что MutationObserver не поддерживается в ослах ниже 11-ой версии.
    Ответ написан
    1 комментарий
  • Как сделать загрузку изображения с компьютера для TinyMCE?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Как сделать
    Всё зависит от того, какой смысл вы вкладывали в эту фразу. Если сделать самому, то тут двумя словами не обойдёшься, а если вы ищите разные пути для достижения цели, то есть и платные варианты, и бесплатные.
    Ответ написан
    Комментировать
  • CSS: calc() для IE в transform: translateX/Y() не работает никак?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Баг известный и, судя по статусу сообщения об ошибке, пока проблема не решена. Можно попробовать сделать свой миксин-костыль, который временно решит проблему. Что-то в таком духе:
    .calc(@t, @a, @b){
      transform: ~"@{t}(@{a}) @{t}(@{b})";
    }
    selector {
       .calc(translateX, 100%, -5rem);
    }
    Ответ написан
    Комментировать
  • Как узнать что iframe загрузился?

    Deonisius
    @Deonisius
    Родился в 11110110111 году, 11000 января.
    Если учитывать старые версии IE не нужно, то код ниже можео сократить, убрав функцию addEvent(), а вместо нее использовать addEventListener(). И кончено же, на мой личный взгляд, использование on+some_event - это не есть гуд, а уж тем более, использование обработчиков внутри тегов. Протестировать можно в песочнице.
    var d = document,
        fr = d.createElement("iframe");
    fr.id = 'my_frame';
    fr.src = "http://toster.ru/";
    d.body.appendChild(fr);
    
    function addEvent(elem, type, handler){
      if(elem.addEventListener){
        elem.addEventListener(type, handler, false);
      } else {
        elem.attachEvent('on'+type, function(){ handler.call( elem ); });
      }
      return false;
    }
    function afterLoad(){
        console.log('Frame loaded!');
    }
    addEvent(fr, 'load', afterLoad);
    Ответ написан
    Комментировать