• Как из FormData() получить массив данных?

    you_web
    @you_web
    Кратко обо мне
    Такой вариант на айфоне сработает, проверил:

    const data = new FormData(form);
    const serializeData = {};
        
    [...data.keys()].forEach((key) => {
      serializeData[key] = data.get(key);
    });
    Ответ написан
    Комментировать
  • Как писать хороший и расширяемый css код?

    you_web
    @you_web
    Кратко обо мне
    Добрый день, есть разные методологии. Ваш вопрос зависит так же от того, по какой методологии вы верстаете. Хорошо себя зарекомендовал БЭМ https://ru.bem.info/methodology/ + less (+ инструмент сборки webpack / gulp)

    При данном подходе стили для каждого блока можно хранить в отдельном файле и далее экспортировать всё в общий. Так же можно отдельно хранить сторонние библиотеки, переменные, миксины и т.д, как в js :)

    Вот как это примерно выглядит в рабочем проекте:
    5f65f7cc473d4545749504.png
    Ответ написан
    3 комментария
  • Gdfdskfkdsfksdkfkd&?

    you_web
    @you_web
    Кратко обо мне
    Да, так можно сделать, есть много способов, вот один из них, суть такая:

    Вы вешаете обработчик на все кнопки, потом, когда обрабатываете клик, смотрите откуда пришел этот клик.
    Получает элемент и с помощью метода closest находите родителя, в котором лежат скрытые элементы.

    И открываете именно их, примерная реализация в коде:

    Вёрстка допустим такая:
    <div class="wrap">
      <h2>Товар 1</h2>
      <div class="hide">Это скрыто</div>
      <button class="open">Кнопка, которая показывает скрытое</button>
    </div>
    
    <div class="wrap">
      <h2>Товар 2</h2>
      <div class="hide">Это скрыто</div>
      <button class="open">Кнопка, которая показывает скрытое</button>
    </div>


    js:

    const btn = document.querySelectorAll('.open');
    
    btn.forEach((item) => {
      item.addEventListener('click', (event) => {
        const itemWrap = e.currentTarget.closest('.wrap');
        const hideElement = itemWrap.querySelector('.hide');
        hideElement.style.display = 'block';
        // И т.д...
      });
    });


    п.с - есть такое понятие "делегирование", в данном контексте, это когда обработчик вешается не на каждую кнопку, а на общий блок. Но это вам думаю не надо раз всего ~ 20 товаров
    Ответ написан
    Комментировать
  • Почему flex элементы не растягиваются?

    you_web
    @you_web
    Кратко обо мне
    Потому что вы им запрещаете :)

    5f65e2213c2f4025954930.png
    Ответ написан
    5 комментариев
  • Как лучше всего решать проблемы с тем когда контент страницы заканчивается, а меню слева еще нет?

    you_web
    @you_web
    Кратко обо мне
    В такой ситуации думают обычно над группировкой меню, либо скрывают часть меню в "еще N пунктов"

    Вот пример как леруа справляется с похожей ситуацией, у них вообще эти техники скомбинированы.
    5f65e1813ba8c741209539.png
    Ответ написан
    Комментировать
  • Как узнать номер строки в коде с которой вызвана функция?

    you_web
    @you_web
    Кратко обо мне
    Можно в девтулзах по колстеку смотреть кто вызвал функцию, а вот получить номер строчки кода думаю нельзя.

    5f65df1f6ac26749295665.png

    Если вы пишете на чем то(тайпскрипт, реакт и т.д) либо или используете минификатор или бабел, то номер строчки кода всё равно будет отличаться от ваших исходников.

    Но можно в аргумент функции логера передавать параметром имя функции.

    const logger = (text, fnName) => {
      console.log(text, fnName);
    }
    
    const someFn = () => {
      // Code...
      logger('text', 'someFn');
    }
    Ответ написан
    2 комментария
  • Как получить доступ к сайту клиента?

    you_web
    @you_web
    Кратко обо мне
    Если правите только контент сайта с админкой, то данные от админки (+ фтп на всякий)
    Если правки только в коде, то обычно фтп достаточно
    Если нужны какие то работы с доменом, с бд и т.д, то от хостинга (оттуда и фтп создать можно и т.д)
    п.с - хостинг домена и самого сайта может быть у разных компаний
    Ответ написан
    Комментировать
  • Как перевести ниже указаний код с jQuery на чистый JS (частично переведен)?

    you_web
    @you_web
    Кратко обо мне
    es6:

    // 1)

    if (activeNote) {
      const node = document.querySelector(`#${activeNote}`);
    
      node.children[0].innerHTML = title;
      node.children[1].innerHTML = created.toLocaleString('en-US');
      node.children[2].innerHTML = body;
      node.style.backgroundColor = color;
    
      activeNote = null;
    }


    // 2)

    const node = document.querySelector('#listed');
    node.appendChild(document.createTextNode(`${title} ${created.toLocaleString('en-US')} ${body} `));


    // 3)

    if (activeNote) {
      const node = document.querySelector(`#${activeNote}`);
      node.parentNode.removeChild(node);
      activeNote = null;
    }


    // 4)

    const nodes = document.querySelector(`#${id}`);
    const titleSel = nodes.children[0].innerHTML;
    const bodySel = nodes.children[2].innerHTML;
    Ответ написан
    Комментировать
  • Как закрыть окно после отправки формы?

    you_web
    @you_web
    Кратко обо мне
    Необходимо было поменять в коде строчку

    dataType: 'json'

    На

    dataType: 'html'

    Так как ответ не приходил в виде json, а приходил в виде html
    Ответ написан
    Комментировать
  • Как сделать два блока прижатые к сторонам?

    you_web
    @you_web
    Кратко обо мне
    .flex-container {
      display: flex;
      justify-content: space-between;
     }


    У флекс контейнера есть свойства justify-content, оно отвечает как будут располагаться потомки флекс родителя по горизонту. Значение space-between это раскидать их "по сторонам"
    Ответ написан
    Комментировать
  • Почему может не работать the_content();?

    you_web
    @you_web
    Кратко обо мне
    Добавьте <?php the_post(); ?> куда нибудь вверх вашего кода, например под <?php get_header( 'page' ); ?> и всё должно заработать.

    Если чуть более подробно, то функция the_post() устанавливает очень много внутренних надстроек.
    Обычно пишут цилкл, но на страницах, где отображается одна запись, обычно single.php, цикл не нужен. Достаточно объявить функцию the_post() перед использованием остальных the функций.
    (Хотя некоторые будут работать и без the_post, такие как например the_excerpt)
    Ответ написан
    Комментировать
  • Как вывести название типа записи в меню wordress?

    you_web
    @you_web
    Кратко обо мне
    А как у вас выводится меню? С регистрированием зон меню, а далее через "Внешний вид" -> "Меню"
    А так же, где у вас отображается ваш новый тип записи:
    На отдельной шаблон-странице (у которой Template Name сверху) через написанный вами цикл
    или вы создали файл archive-city.php ?

    В первом случае, вы можете создать страницу в разделе "Страницы" и указать ей на этот шаблон, а далее в разделе "Внешний вид" -> "Меню" добавится новая страница во вкладке "Страницы". И вы сможете добавить её в ваше меню

    Во втором случае проще всего добавить через "Произвольную ссылку". Минус конечно в том, что при переезде сайта на другой домен это ссылка будет неверной, но так ли часто переезжают сайты :)
    Ответ написан
    1 комментарий
  • Как перенести JS в html файл?

    you_web
    @you_web
    Кратко обо мне
    Если я правильно понял вопрос, то вот так:
    <!-- Начало html кода  -->
    <div>
     <p>Какой то html код</p>
    </div>
    <!-- Далее вставляете тег <script> и в нём пишете js -->
    <script>
     const str = "А тут уже рабочий js код, внутри html документа";
     const sum = 2 + 2;
     pdfjsLib.GlobalWorkerOptions.workerSrc = 'mozilla.github.io/pdf.js/build/pdf.worker.js';
    </script>


    То есть внутри html документа вставляете тег <script> </script> и в него пишите нужный вам js
    Ответ написан
  • Почему редко на сайтах применяются сложные конструкции JS+CSS3 эффекты?

    you_web
    @you_web
    Кратко обо мне

    С чем вызвано данное явление?
    Оптимизация?
    Бюджет?
    Или банальная лень?

    да да и да)

    А для чего? Долго сидя в интернете уже надоедают пёстрые и яркие сайты, с которых побыстрее охото уйти.
    Всё больше начинаешь любит спокойный флет стиль типо тостера, хабра, пикабу и т.д

    И да, много скриптов и css анимаций могут хорошо так давать нагрузку. Даже не то что у древнего компа, а просто при работе в нескольких окнах \ приложениях. Тем более современные браузеры неплохо так кушают. А если играть во что нибудь в несколько окон (сливать арену в 6 окон в wow), да еще и серфить в инете, все эти скрипты и анимации будут очень дико лагать.

    А для клиентов этого делать просто нет времени. Вот у тебя идёт поток сайтов, ты еле успеваешь правки делать. Ну сделаешь ты 1-2 клиентам такие анимации, а они этого даже не заметят, так еще и на половине устройств всё криво работать будет. А платить за это мало кто станет. Если только сайту нужно вызвать какой то wow эффект.
    Ответ написан
    1 комментарий
  • Как решить проблему с margin + height: 100vh?

    you_web
    @you_web
    Кратко обо мне
    Я юзаю calc, но динозавры его могут не поддерживать, зато без js.

    В вашем случае:
    height: calc(100vh - 6rem);

    Так как margin: 3rem; То плюсуем верх и низ и убираем 6rem
    Вся прелесть calc что он умеет работать с разными величинами

    В принципе неплохая поддержка: https://caniuse.com/#search=calc
    Ответ написан
    Комментировать
  • Как Toggle Class использовать в двух разных местах на одной странице (два класса - два скрипта)?

    you_web
    @you_web
    Кратко обо мне
    Сейчас вы просто написали функцию, но нет никаких условий для её выполнения
    Вам надо выбрать на какой элемент повесить событие, что бы при клике выполнялась ваша функция.
    Например:
    const btn1 = document.querySelector('.btn1');

    Далее на эту кнопку надо повесить событие click и указать какая функция должна выполняться при этом событии:

    btn1.addEventListener("click", myFunction);
    Обратите внимание, что функция в при навешивании в обработчик пишется без ().
    Ответ написан
    Комментировать
  • Как генерировать файлы svg в спрайт чтобы можно было вставлять через html?

    you_web
    @you_web
    Кратко обо мне
    Использую gulp svgstore для свг спрайтов.

    var svgstore = require('svgstore');
    var rename = require("gulp-rename");
    
    gulp.task('svg-sprite', function(){
    	return gulp.src(['dist/img/svg/icon/**/*.svg', '!dist/svg/icon/sprite.svg'])
    	.pipe(svgstore({
    		inlineSvg: true
    	}))
    	.pipe(rename('sprite.svg'))
    	.pipe(gulp.dest('dist/img/svg/icon'))
    });


    Далее вставляю через svg -> use

    <svg>
        <use xlink:href="img/svg/icon/sprite.svg#id_свг_без_формата"></use>
    </svg>
    
    Например:
    
    <svg> 
        <use xlink:href="img/svg/icon/sprite.svg#icon-top3"></use>
    </svg>


    id свг будет такой же, как и имя svg файла при сборке спрайта
    Ответ написан
    Комментировать
  • Не срабатывает модальное окно, как можно исправить?

    you_web
    @you_web
    Кратко обо мне
    Я скопировал ваш код, всё работает. Какая у вас ошибка в консоли?
    jquery подключен ДО этого кода?
    Ответ написан
  • Как сделать так, чтобы ajax окно после отправки письма открыло другое окно?

    you_web
    @you_web
    Кратко обо мне
    Вам надо узнать какая функция отвечает за закрытие\открытие модальных окон (либо написать её самому), далее найти в js файлах примерно следующие строки (что то похожее у вас должно быть, форма отправки ajax)

    И подставить нужные функции

    function sendForm() {
        var msg = $('form').serialize();
        $.ajax({
            type: 'POST',
            url: '/send.php',
            data: msg,
            success: function(data) {
                // Сюда подставить функцию закрытия текущего попап и потом открытия нужного
            },
            error:  function(xhr, str){
                alert('Возникла ошибка: ' + xhr.responseCode);
            }
        });
    }
    Ответ написан
    1 комментарий