Ответы пользователя по тегу JavaScript
  • В Dropzone.js как сделать thumbnails?

    1. нужно отлавливать событие `addfile` (см. раздел Events в документации Dropzone)
    2. с помощью FileReader API получить datauri
    3. создать new Image,
    4. запихать в его src = datauri
    5. отрисовать Image где-либо (либо в контейнере самого dropzone)

    Я когда-то давно делал такое, точно конечно же не помню, но алгоритм примерно такой.
    Доп. ссылка пример FileReader API: https://codepen.io/matt-west/pen/CfilG
    Ответ написан
    Комментировать
  • Как перехватить backspace в Chrome?

    keypress событие срабатывает только для character (которые выводят) клавиш. Для Control, Shift, Alt, BackSpace нужно отлавливать событие keydown
    Ответ написан
  • Как сделать поиск массива слов на странице?

    Если поиск с точным совпадением, то
    ['word1', 'word2', 'word3'].indexOf('word2');
    Если метод не находит совпадений, возвращает -1 иначе индекс в массиве.

    Если нужен поиск по вхождениям, то нужно перебирать массив и у каждого элемента искать подстроку.
    Ответ написан
    Комментировать
  • Как открыть fancybox попап из попапа?

    Вы должны после вставки контента который пришел с ajax запроса в fancybox, забиндить событие click на новую кнопку и в обработчике выполнить, то что вы хотите. У fancybox есть события beforeShow, в нем и нужно будет найти node кнопки, которая уже будет вставлена из контента.
    .done(function(data) {
      // ...
      $.fancybox(data, {
        beforeShow: function () {
          var $btn = // тут вы смотрите в this и там найдете свойство в виде jquery выборки в котором будет ваш контент
    
          $btn.on('click', function () {
            // ваши действия
          })
        }
      })
      // ...
    })
    Ответ написан
    3 комментария
  • Select2 как сохранить порядок select'a?

    <select id="jq-select2" name="select" multiple="multiple">
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
        <option value="4">D</option>
    </select>


    var $select = $('#jq-select2');
    // Индекс сортировки
    var sortIndex = 0;
    
    var select2Instance = $select.select2({
        // Явно определяем сортировку элементов в dropdown, иначе сортировка,
        // которая отрабатывает в обработчике события selecting, будет
        // переопределят и вывод и в dropdown. Чтоб понять о чем речь
        // можно закомментить данную опцию.
        sorter: function (data) {
            return data.sort(function (a, b) {
                if (Number(a.id) > Number(b.id)) return 1;
                else if (Number(a.id) < Number(b.id)) return -1;
                return 0;
            });
        }
    }).data().select2;
    
    // Событие когда выбрали элемен в dropdown (перед вставкой в select2)
    select2Instance.on('selecting', function (e) {
        // Увеличиваем индекс сортировки и привайваем ноде
        // в виде нового свойства объекта (лучше в dataset запихать)
        e.args.data.element.sortIndex = ++sortIndex;
    
        // Получвем все option из select`а
        var $options = $select.find('option');
    
        // Сортируем все option`ы по индексу сортировки
        $options.sort(function (a, b) {
            if (~~a.sortIndex > ~~b.sortIndex) return 1;
            else if (~~a.sortIndex < ~~b.sortIndex) return -1;
            return 0;
        });
    
        // Очищаем select от option`ов и аппендим отсортированные
        $select.empty().append($options);
    });


    Вот, что получилось после часа тупника. Единственное появляется один баг, при удаление элемента появлется dropdown. С этим придется вам повозиться.
    Ответ написан
    Комментировать
  • Как с помощью foundation abide проверять склеенные в один 4 инпута ввода номера карты?

    Наверное дизайнер по мимо прочего еще и подразумевал, что в каждом input будет по 4 цифры? Если так, то возникает проблема другая. Есть карты у Visa (вроде бы), где более 16 цифр.

    Самое тупое, что можно придумать, чтоб не модифицировать ни чего, это сделать 4 input поверху одного input.
    Данные которые вводятся в 4 input собирать и вносить в тот input.
    joxi.ru/jnAyDnRU9YVO2Z
    Ответ написан
    Комментировать
  • Как вернуть xhr.responseText из функции?

    Если нужен пакет только для ajax, как вариант superagent. Простой и красивый api
    https://github.com/visionmedia/superagent
    Ответ написан
    Комментировать
  • Как реализовать свою кнопку play/pause для плеера Vimeo?

    У них тож есть раздел API
    1bfc8808780a44b98c0479dc51c7b80b.png
    Ответ написан
    Комментировать
  • Как правильно учить Javascript?

    По поводу книг, кто бы, что не говорил, но Definitive Guide конченая книга, имхо! Человека не знающего программирования по мере чтения грузят разрознеными терминами, и чем дальше тем хуже. В итоге чтение превращается постоянное прыгание назад в попытках понять тот или иной термин. Вообще не рекомендую эту книгу.
    Секреты нинзя обязательна к прочтению, но не сейчас. Шаблоны тем более.

    Учебник на javascript.ru достойное руководство, вот его и читайте не прыгая.
    На javascript можно теже самые и интернет-магазины, и мини соц. сети, но вы себе башку не забивайте этим. Изначально он был разработан для выполнения скриптов на стороне браузера (клиента). Добавление динамики для статичного html. Элементарные примеры: анимация (сложная), обработка событий (например мышки: клик, даблклик, пермещение).
    Ответ написан
    8 комментариев
  • Как правильно прописать js условие для ie11?

    Все верно, нынче не модно проверять версию браузера, но тем не менее:
    var isIE11 = navigator.userAgent.match(/Trident\/7.0; rv 11.0/);


    UPDATE:
    User-agent может быть и таким: "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2; rv:11.0) like Gecko"

    Наиболее верный способ наверное этот (не проверялся на IE < 11):
    var isIE11 = document.body.style.msTextCombineHorizontal !== undefined;
    Ответ написан
    5 комментариев