Задать вопрос
  • Что нужно изменить, чтобы скрипт работал без jQuery?

    Adamos
    @Adamos
    https://youmightnotneedjquery.com/#on и далее по пунктам
    Ответ написан
    Комментировать
  • Могу я задать вопрос по коду, как мегаджун JS?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    1) Плохой код, который выполняет задачу, лучше чем отсутствие кода
    2) Перед работой составьте примерный план, например: "сначала получаем данные, потом с ними делаем это или это, потом выводим..." Это помогает не лепить откровенную фигню по ходу дела и не переписывать все по 10 раз.
    3) Смысл рассматривать простыню из кода новичка отсутствует, так как это похоже на оценку походки будущей фотомодели по первым шагам в ходунках. Никто не пишет хороший код сразу, учиться и писать много - лучший путь обучения.
    4) Смотрите на чужие готовые решения, думайте как использовать интересные приемы, именно свои выводы и ошибки делают вас программистом+, а не гов*окодером. Задатки и желание у вас есть, значит все получится.
    Ответ написан
    Комментировать
  • Как показывать страницу с самого начала при переключении между страницами?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    https://reactrouter.com/web/guides/scroll-restoration

    import { useEffect } from "react";
    import { useLocation } from "react-router-dom";
    
    export default function ScrollToTop() {
      const { pathname } = useLocation();
    
      useEffect(() => {
        window.scrollTo(0, 0);
      }, [pathname]);
    
      return null;
    }
    Ответ написан
    1 комментарий
  • Как добавить запятную после первого элемента, но только если длинна не меньше 4?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно использовать поддерживаемый современными браузерами Intl.NumberFormat
    const formatter = new Intl.NumberFormat('en-US');
    
    formatter.format(12345) // "12,345"
    formatter.format(123) // "123"
    formatter.format(1234567) // "1,234,567"
    Ответ написан
    3 комментария
  • Возможно ли в ссылке на скачивание передать дополнительные данные?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Возможно ли в ссылке на скачивание передать дополнительные данные?


    Да, возможно. В чём конкретно проблема? Не знаете как добавить параметры к ссылке?
    Ответ написан
    2 комментария
  • Как продолжать цикл for по нажатию кнопки?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Если напрямую отвечать на странный вопрос, то это можно внутри асинхронных функций.
    Каждый раз дожидаться резолва промиса.
    Ответ написан
    Комментировать
  • Можно ли в js проверить чему равен style display в css?

    Ankhena
    @Ankhena Куратор тега JavaScript
    Нежно люблю верстку
    Из CSS получает getComputedStyle
    var obj1 = document.getElementById('test1');
    
    if (getComputedStyle(obj1).display == 'none') {
    document.getElementById('rezult1').innerHTML = "Скрыто";
    }

    Держите https://jsfiddle.net/bh0pvcw5/
    Ответ написан
    1 комментарий
  • Как реализовать анимацию "печатает..."?

    noder_ss
    @noder_ss
    Линуксоид-энтузиаст и SQL разработчик
    Здраствуйте, получилось сделать вариант с transition-delay;
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div><p>Is typing <span class="dot1">.</span>
            <span class="dot2">.</span>
            <span class="dot3">.</span></p></div>
    </body>
    <style>
        @import url(https://fonts.googleapis.com/css?family=Montserrat:100,200,300,regular,500,600,700,800,900,100italic,200italic,300italic,italic,500italic,600italic,700italic,800italic,900italic);
        html{
            font-family: Montserrat;
    
        }
        .dot1{
            transition-delay: 0.1s;
            opacity: 0;
            transition-duration: 0.3s;
        }
        .active-dot1{
            opacity: 1;
            transition-delay: 0.1s;
            transition-duration: 0.3s;
        }
        .dot2{
            transition-delay: 0.2s;
            opacity: 0;
            transition-duration: 0.3s;
        }
        .active-dot2{
            transition-delay: 0.2s;
            opacity: 1;
            transition-duration: 0.3s;
        }
        .dot3{
            transition-delay: 0.3s;
            opacity: 0;
            transition-duration: 0.3s;
        }
        .active-dot3{
            transition-delay: 0.3s;
            opacity: 1;
            transition-duration: 0.3s;
        }
    </style>
    <script>
        let dot1 = document.querySelector(".dot1")
        let dot2 = document.querySelector(".dot2")
        let dot3 = document.querySelector(".dot3")
        setInterval(() => {
            dot1.classList.toggle("active-dot1")
        }, 500);
        setInterval(() => {
            dot2.classList.toggle("active-dot2")
        }, 500);
        setInterval(() => {
            dot3.classList.toggle("active-dot3")
        }, 500);
    </script>
    </html>

    (Если слишком большая скорость анимации, увеличите длительность transition-durationи setInterval)
    Ответ написан
    Комментировать
  • Как не дублировать компонент с похожими данными?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    const options = computed(() => {
      if (props.secondType) 
        return props.secondTypeItems.map(({ id, value}) => ({
          label: value,
          value: id 
        }));
    
      if (props.thirdType) 
        return props.thirdTypeEvents.map(({ desc, name }) => ({
          label: name,
          value: desc 
        }));
    
      // ...
    
      return [];
    });


    <el-select
          v-model="modelText"
          placeholder="Выберите предмет"
          @change="changeVal"
        >
          <el-option
            v-for="{ label, value} in options"
            :key="value"
            :label="label"
            :value="value"
          >
            {{ label }}
          </el-option>
        </el-select>
    Ответ написан
    Комментировать
  • Как переписать функцию с использованием Promise?

    polyak-888
    @polyak-888
    Js, React.js, css, frontend
    Привет, вижу решение проблемы тремя способами:
    1) getCurrentPosition будет таким
    getCurrentPosition () {
      return new Promise((resolve, reject) => {
        navigator.geolocation.getCurrentPosition(position => {
          resolve(position.coords)
        });
      })
    }

    а mounted таким
    async mounted() {
            this.getCurrentTime()
            const coords = await this.getCurrentPosition()
            this.getCurrentWeather(coords)
            setInterval(() => this.getCurrentWeather(), 2000)
        },

    если this.lat и this.long только нужны для вызова getCurrentWeather в mounted, то и незачем их класть в data
    2) поставить watch this.lat и this.long и как только появится значение вызывать getCurrentWeather
    3) Создать промис (new Promise) и resolve не вызывать сразу а поместить в переменную. Промис поместить в mounted, с await. А переменную с ссылкой на resolve вызвать в getCurrentPosition после того как получил координаты. Так как этот вариант не самый идеальный, код выкладывать не буду. Будет стимул поискать самому))
    Ответ написан
    3 комментария
  • Как сложить все значения массива по полю месяца?

    XanXanXan
    @XanXanXan
    const monthData = allData.reduce((acc, { day, speed, distance, wagons }) => {
      const yearMonth = day.match(/\d{4}-\d{2}(?=-\d{2})/)[0];
        
      if (acc[yearMonth]) {
        acc[yearMonth].speed += speed;
        acc[yearMonth].distance += distance;
        acc[yearMonth].wagons += wagons;
      } else {    
        acc[yearMonth] = { speed, distance, wagons };
      }
    
      return acc;
    }, {})
    Ответ написан
    4 комментария
  • Как сложить все значения массива по полю месяца?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Стоит включить и год, и месяц в хэш, а то мало ли, более 1 года попадёт в выборку.
    const props = ['speed', 'distance', 'wagons'];
    
    const result = data.reduce((acc, c) => {
      const yearMonth = c.day.substring(0, 7); // '2022-03'
      props.forEach(prop => {
        acc[prop][yearMonth] = (acc[prop][yearMonth] ?? 0) + c[prop];
      });
      return acc;
    }, Object.fromEntries(props.map(prop => [prop, {}])));
    Результат
    {
      "speed": {
        "2022-09": 22452,
        "2022-10": 65668.58282444967,
        "2022-11": 6397.635863857564
      },
      "distance": {
        "2022-09": 68752,
        "2022-10": 1119233,
        "2022-11": 289732
      },
      "wagons": {
        "2022-09": 26,
        "2022-10": 427,
        "2022-11": 176
      }
    }


    Другой вариант:
    const hashMap = data.reduce((acc, { day, ...rest }) => {
      const hash = day.substring(0, 7);
      if (Object.hasOwn(acc, hash)) {
        Object.keys(rest).forEach(prop => acc[hash][prop] += rest[prop]);
      } else {
        acc[hash] = { day: hash, ...rest };
      }
    
      return acc;
    }, {});
    
    const result = Object.values(hashMap);
    Результат
    [
      {
        "day": "2022-09",
        "speed": 22452,
        "distance": 68752,
        "wagons": 26
      },
      {
        "day": "2022-10",
        "speed": 65668.58282444967,
        "distance": 1119233,
        "wagons": 427
      },
      {
        "day": "2022-11",
        "speed": 6397.635863857564,
        "distance": 289732,
        "wagons": 176
      }
    ]
    Ответ написан
    3 комментария
  • Как вставить изображение из input в img?

    nowm
    @nowm
    Чтобы вставить изображение из input type="file", нужно после загрузки изображения прочитать содержимое этого файла с помощью FileReader, сконвертировать в формат data url и только потом это применять к тегу img.

    myImg.onchange = function(event) {
        var target = event.target;
    
        if (!FileReader) {
            alert('FileReader не поддерживается — облом');
            return;
        }
    
        if (!target.files.length) {
            alert('Ничего не загружено');
            return;
        }
    
        var fileReader = new FileReader();
        fileReader.onload = functino() {
            img1.src = fileReader.result;
        }
    
        fileReader.readAsDataURL(target.files[0]);
    }


    В вашем коде myImg — это input type="file". У таких инпутов нет src. Когда с их помощью подгружаются файлы, в свойстве files, находятся все загруженные в этот инпут файлы. Точнее не файлы, а специальные объекты-интерфейсы, привязанные к загруженным файлам. С помощью этих интерфейсов уже можно делать различные действия с соответствующими файлами: узнавать название файла, дату последнего изменения, MIME-тип файла, читать его содержимое и так далее.
    Ответ написан
    7 комментариев
  • Как отобразить дефолтный атрибут в select в Vue2?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://v2.vuejs.org/v2/guide/forms.html

    <select v-model="selected">
      <option v-for="option in options" v-bind:value="option.value">
        {{ option.text }}
      </option>
    </select>
    <span>Selected: {{ selected }}</span>


    new Vue({
      el: '...',
      data: {
        selected: 'A',
        options: [
          { text: 'One', value: 'A' },
          { text: 'Two', value: 'B' },
          { text: 'Three', value: 'C' }
        ]
      }
    })
    Ответ написан
    Комментировать
  • Как пробросить класс компонента?

    victormayorov
    @victormayorov
    Frontend разработчик
    Вы не можете использовать зарезервированные имена для передачи данных в props.
    <autocomplete-input
                  :variants="cargo_codes"
                  :variantKey="'id'"
                  :label="'Код груза'"
                  :variantTitle="'code6'"
                  v-model="all_information.cargo_code"
    --              :class="{ 'error_label': this.telegram_error.cargo_code }"
    ++             :myClass="{ 'error_label': this.telegram_error.cargo_code }"
                ></autocomplete-input>


    export default {
        name: 'AutocompleteInput',
        props: {
            variants: {
                type: Array,
                required: true,
            },
            value: {
                default: ''
            },
            label: {
                type: String,
                default: '',
            },
            variantKey: {
                type: String,
                default: 'id'
            },
            variantTitle: {
                type: String,
                default: 'id'
            },
            placeholder: {
                type: String,
                default: ''
            },
            needFull: {
                type: Boolean,
                default: false
            },
    --        error_label: {
    --           type: String,
    --           default: ''
    --       }
    ++        myClass: {
    ++          type: String,
    ++         default: {},
    ++       }
        },


    <template>
        <div class="autocomplite_component">
            <div class="controller">
    
            <input type="text" class="textarea" @input="onInput" :value="value" :placeholder="placeholder">
            </div>
            <br>
    --        <label class="label" :class="error_label">{{ label }}</label>
    ++        <label class="label" :class="myClass">{{ label }}</label>
            <div class="variants" v-if="filtered && showVariants" style="max-height: 50px; overflow: auto;">
                <div v-for="v in filtered" :key="v[variantKey]" class="variant" @click="selectVariant(v)">
                  <span style="cursor: pointer;">{{ v[variantTitle] }}</span>  
                </div>
            </div>
           
        </div>
    </template>
    Ответ написан
    1 комментарий
  • Как выставить шанс функции Math.random?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const phones = [
      { p: '9171857450', c: 1 },
      { p: '9880735438', c: 10 },
      { p: '9880735439', c: 100 },
      { p: '9880735779', c: 2 },
      { p: '9170997305', c: 2 },
      { p: '9170997493', c: 2 },
      { p: '9880634879', c: 5 },
      { p: '9170996154', c: 1 },
      { p: '9880728447', c: 1 },
    ];
    const chancesTotal = phones.reduce((acc, { c }) => acc + c, 0);
    const selected = Math.floor(Math.random() * chancesTotal);
    let phone;
    for (let i = 0, sum = 0; i < phones.length; i++) {
      sum += phones[i].c;
      if (selected < sum) {
        phone = phones[i].p;
        break;
      }
    }
    const randomUrl = `https://wa.me/${phone}?text=Привет!%20Пришлите%20мне%20цены%20на%20рыбку!`;
    Ответ написан
    5 комментариев
  • Как сделать placeholder на SELECT?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Добавьте в компонент слот:

    <slot name="placeholder"></slot>

    Соответственно, при использовании компонента можете что-то в этот слот передать:

    <template #placeholder>
      <option value="" disabled>давай, выбирай</option>
    </template>

    https://jsfiddle.net/zc53rugL/
    Ответ написан
    Комментировать
  • Есть ли польза от codewars?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Оно может быть полезно только для совсем новичков, когда начал изучать ЯП, в создании реальных же программных продуктов этот опыт вряд ли пригодится. Лично я попробовал и мне не понравилось, тренировался всегда на тех задачах, что придумывал сам._
    Ответ написан
    1 комментарий
  • Как реализовать смену текста при переключении между radio button?

    0xD34F
    @0xD34F Куратор тега Vue.js
    data: () => ({
      meetupId: null,
      meetupData: null,
    }),
    watch: {
      meetupId(val) {
        fetch(`https://course-vue.javascript.ru/api/meetups/${val}`)
          .then(r => r.json())
          .then(r => this.meetupData = r);
      },
    },

    <label v-for="i in 5">
      <input type="radio" name="meetupId" :value="i" v-model="meetupId">
      {{ i }}
    </label>
    <pre>{{ meetupData }}</pre>
    Ответ написан
    Комментировать
  • Как реализовать смену текста при переключении между radio button?

    Wispik
    @Wispik
    В v-model должна быть одна и та же переменная, в которую будет записываться значение value.
    Ответ написан
    Комментировать