Ответы пользователя по тегу JavaScript
  • Сворачивающийся\разворачивающийся блок в 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 января.
    Как сделать
    Всё зависит от того, какой смысл вы вкладывали в эту фразу. Если сделать самому, то тут двумя словами не обойдёшься, а если вы ищите разные пути для достижения цели, то есть и платные варианты, и бесплатные.
    Ответ написан
    Комментировать
  • Как узнать что 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);
    Ответ написан
    Комментировать