Ответы пользователя по тегу JavaScript
  • Зачем нужны data-аттрибуты, если можно поставить любые?

    SagePtr
    @SagePtr
    Еда - это святое
    Удобный доступ через массив dataset.
    Да и аттрибуты через data- гарантируют то, что браузер не будет их воспринимать как-то по-особенному и разработчик вправе сам вкладывать в них смысл, не боясь ничего поломать (если аттрибуты с таким же именем будут что-то значить для браузера).
    Ответ написан
    Комментировать
  • Возможно ли запретить скролл, но оставить полосу прокрутки?

    SagePtr
    @SagePtr
    Еда - это святое
    К примеру, сделать полосу прокрутки div'ом, или на самый худой конец, нарисовать её на canvas. И изменять положение/перерисовывать при определённых событиях.

    %D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D0%
    Ответ написан
    Комментировать
  • Как чистить HTML код присылаемый в форме в textarea?

    SagePtr
    @SagePtr
    Еда - это святое
    filter_input(INPUT_POST, 'html_test', FILTER_SANITIZE_SPECIAL_CHARS);
    Ответ написан
    Комментировать
  • Ошибка при загрузке Яндекс Карты что делать?

    SagePtr
    @SagePtr
    Еда - это святое
    Посмотреть, что выполняется в функции YandexMapRoute, и сделать то же самое, но без вызова функции.
    Ответ написан
    Комментировать
  • DropzoneJS, PHP. Как выявить причину ошибки "500 (Internal Server Error)"?

    SagePtr
    @SagePtr
    Еда - это святое
    Смотреть в логи ошибок веб-сервера, там обычно написано, что именно произошло не так
    Ответ написан
    2 комментария
  • InnerHTML vs document.createElement ???

    SagePtr
    @SagePtr
    Еда - это святое
    С innerHTML есть побочные эффекты - например, старые элементы, какие там были, будут пересозданы в дереве DOM и они могут потерять то, что было назначено им не через HTML-код документа или изменено в процессе пользователем. Ну и также у textContent преимущество в том, что не нужно беспокоиться об XSS (если злоумышленник загонит туда HTML-тэги).

    Кстати, есть ещё один метод - insertAdjacentHTML (он сочетает в себе простоту innerHTML, но не передраконивает предыдущее содержимое)
    Ответ написан
    Комментировать
  • Как оптимизировать или сократить код который повторяется?

    SagePtr
    @SagePtr
    Еда - это святое
    Если делаете переключатель между тремя темами оформления, то проще сделать так:
    CSS:
    /* общие для всех тем */
    .navigation { /* style */ }
    .sect-one { /* style */ }
    .project-title { /* style */ }
    /* конкретные для темы evil вдобавок к общим */
    body.theme-evil .navigation { /* style */ }
    body.theme-evil .sect-one { /* style */ }
    body.theme-evil .project-title { /* style */ }
    /* конкретные для темы hacker вдобавок к общим */
    body.theme-hacker .navigation { /* style */ }
    body.theme-hacker .sect-one { /* style */ }
    body.theme-hacker .project-title { /* style */ }
    /* ..... */

    Тогда JS вообще легко уменьшится до нескольких строк:
    $(document).ready(function() {
      var themes = ['evil', 'hacker', 'basic'];
      var oldTheme = 'basic';
      themes.forEach(function(theme) {
        $('#' + theme).click(function() {
          $('body').removeClass('theme-' + oldTheme);
          $('body').addClass('theme-' + theme);
          oldTheme = theme;
        });
      });
    });
    Ответ написан
    6 комментариев
  • Как сделать красивый фон, если фото/картинка в вертикальном положении?

    SagePtr
    @SagePtr
    Еда - это святое
    Могу словами описать алгоритм построения изображения:
    1) Вычисляем ширину боковой полосы ((итоговая ширина - исходная ширина) / 2)
    2) Создаём временное изображение шириной с боковую полосу, но на n пикселей шире (в зависимости от силы размытия)
    3) Копируем во временное изображение левую часть картинки (втупую функцией imagecopy), выровняв её по левому краю.
    4) Размываем функцией imagefilter, силу размытия подбирайте сами на свой художественный вкус.
    5) Создаём конечное изображение
    6) Копируем наше размытое изображение в левую часть конечного изображения
    7) Во временное изображение копируем правую часть исходного изображения с выравниванием по правому краю
    8) Повторяем размытие для него
    9) Копируем в конечное изображение по правому краю
    10) Напоследок - копируем исходное изображение в конечное изображение по центру (левая координата = ((конечная ширина - исходная ширина) / 2)
    11) Сохраняем изображение и освобождаем память (впрочем, PHP сам освободит)
    Ответ написан
    Комментировать
  • Не могу понять задачу по замыканию?

    SagePtr
    @SagePtr
    Еда - это святое
    if (func(val)) {
    вот тут значение val передаётся в функцию в виде аргумента x.
    Ответ написан
  • Может ли эта уязвимость навредить сайту?

    SagePtr
    @SagePtr
    Еда - это святое
    А ещё в пост вставить картинку с котиком, а через некоторое время (когда пост затеряется и шанс модератора наткнуться на него будет минимальным) - заменить картинку с котиком на изображение листа конопли и натравить на него Роскомнадзор.
    В итоге сайт улетает в блокировку, а владельцы некоторое время не понимают, почему кол-во посетителей из России вдруг упало, а найти картинку, к которой РКН придрался, будет весьма сложно, так как факт замены в логах нигде отражён не будет, ибо заменена она будет на стороне стороннего сервера.
    Ответ написан
    1 комментарий
  • Почему не работает ember test? И почему node_modules пустой?

    SagePtr
    @SagePtr
    Еда - это святое
    Нужно сначала выполнить npm install в корневой директории проекта. Это касается не только ember, но и любого проекта на nodejs, содержащего сторонние модули. Модули сами автоматом не установятся (если у вас в деплой-скрипте это не прописано, естественно).
    Ответ написан
  • Можно ли передать cookie через ссылку?

    SagePtr
    @SagePtr
    Еда - это святое
    Можно, если на той стороне стоит скрипт, который по переданному параметру устанавливает куку. Единственное - желательно этот параметр как-нибудь зашифровать или подписать, дабы злоумышленник не сумел произвольные куки произвольным пользователям устанавливать посредством атак наподобие CSRF.
    Ответ написан
    Комментировать
  • Как расшифровать JS код типа: \x32\x33\x20\ и т.д?

    SagePtr
    @SagePtr
    Еда - это святое
    В вашем примере - символы заменены своими HEX-кодами.
    console.log("\x32\x33\x20\x48\x3D\x5B\x22\x5C\x57\x5C\x6B\x5C\x4E\x5C") выведет 23 H=["\W\k\N\ как и полагается. Или вам 23 H=["\W\k\N\ расшифровать надо?
    Ответ написан
    2 комментария
  • Input autocomplete?

    SagePtr
    @SagePtr
    Еда - это святое
    Атрибут list у input. Пример в статье имеется.
    Ответ написан
    Комментировать
  • Почему тут ответ 1, по идее правильный ответ 2?

    SagePtr
    @SagePtr
    Еда - это святое
    Один, потому что когда мы делаем appendChild какого-нибудь уже существующего элемента в дереве DOM, то этот элемент исчезает из предыдущего узла (происходит перемещение, а не копирование).
    В итоге первый раз элемент с id="p" (потому как если обратиться к необъявленной переменной в режиме без "use strict" - он сперва проверит наличие нужного поля в объекте window, а если обратиться к неизвестному полю объекта window - он вернёт элемент с таким id, если он есть) будет помещён внутрь элемента с id="div". Второй раз - этот элемент будет снова туда помещён, но из старого места он будет убран - то есть, из элемента div снова переместится в конец его же.
    Вот наглядный пример с пятью кнопками: https://codepen.io/anon/pen/eLooRm (при нажатии на кнопку - она перемещается вниз, при этом никакого копирования не происходит, просто перенос)
    Ответ написан
    Комментировать
  • Сколько строк js может быть в интерактивном сайте?

    SagePtr
    @SagePtr
    Еда - это святое
    Да, во фреймворках обычно огромное количество кода, который не используется вашим сайтом, но может использоваться другими или при других обстоятельствах.
    Прогоните код через минификатор, вполне возможно, что-то лишнее он оттуда и повыкидывает (но только то, что возможно безопасно выкинуть)
    Ответ написан
    Комментировать
  • Есть ли способы прочитать содержимое страницы с другого домена на javascript?

    SagePtr
    @SagePtr
    Еда - это святое
    Только на бэкенде или при помощи расширения к браузеру/юзерскрипта
    Ответ написан
    Комментировать
  • Объясните, почему не срабатывает await?

    SagePtr
    @SagePtr
    Еда - это святое
    Потому что setTimeout и console.log не асинхронные. Вернее, setTimeout - асинхронный, но не через механизм async/await (сахар для Promise), а через колбэк, передающийся первым параметром (потому чтобы использовать его через await - нужно будет завернуть его в функцию, возвращающую promise)
    Ответ написан
    Комментировать
  • Как сделать такую функцию?

    SagePtr
    @SagePtr
    Еда - это святое
    Как-то так (в виде однострочника):
    const f = (a, sum) => a.reduce((r, x, i) => r.concat(a.slice(i+1).filter(y => x + y == sum).map(y => [x, y])), [])
    Но для больших объёмов данных это вряд ли будет эффективно, скорее всего, самое обычное решение с двумя вложенными циклами будет работать шустрее и менее затратно по памяти, чем в цикле гонять массив через slice/filter/map. В лоб это как-то так:
    const f = (a, sum) => {
      const l = a.length;
      let r = [];
      for (let i = 0; i < l-1; i++)
        for (let j = i+1; j < l; j++)
          if (a[i] + a[j] == sum)
            r.push([a[i], a[j]]);
      return r;
    }
    Ответ написан
    Комментировать