Ответы пользователя по тегу JavaScript
  • Как проставить автоматическую индексацию тегов с одинаковым классом через JavaScript?

    Stalker_RED
    @Stalker_RED
    Не нужна никакая индексация, просто при клике определяйте какой элемент был кликнут, находите трек внутри этого элемента.

    <audio id="player"></audio>
    <ul id="playlist">
      <li data-src="https://freesound.org/data/previews/447/447951_4716066-lq.mp3">tarck1</li>
      <li data-src="https://freesound.org/data/previews/447/447896_7020227-lq.mp3">tarck2</li>
      <li data-src="https://freesound.org/data/previews/447/447949_9080507-lq.mp3">tarck3</li>
    </ul>
    <script>
    player.addEventListener("canplay", myAutoplay);
    player.addEventListener("canplaythrough", myAutoplay);
    
    function myAutoplay () {
      player.play();
    }
    
    playlist.addEventListener('click', function(evt) {
      const track = evt.target.closest('li[data-src]');
      if (track) {
        player.src = track.dataset.src;
      }
    });
    
    </script>

    https://jsfiddle.net/Lp3c27ah/
    Ответ написан
    1 комментарий
  • Window.getComputedStyle: Argument 1 is not an object — Как исправить ошибку?

    Stalker_RED
    @Stalker_RED
    Проблема в том, что первый аргумент передаваемый в метод getComputedStyle не является объектом.
    А все остальные подробности вы предлагаете угадать?

    подсказка: в консоли, в сообщении об ошибке можно кликнуть на номер строки.
    Ответ написан
    2 комментария
  • Зачем нужно писать дважды eval()?

    Stalker_RED
    @Stalker_RED
    Можно и не писать два раза
    function Calc() {
          num = eval(num); // записать сразу в переменную
          document.querySelector(".display").value = num;  // затем вывести на дисплей
        }


    А по хорошему, eval вообще не стоит писать, ни разу.
    И onclick="CLICK(this)" повторять 12 раз тоже не надо.

    Вот например без кучи онкликов


    Но в любом случае, эта поделка с eval-ом не калькулятор, а пародия.
    Введите например 1++2 - и посчитайте - получите ошибку.
    Или посчитайте например 1/0 - получите Infinity, затем добавьте любую цифру, опять равно, и снова упадет в ошибку.

    Можно куонечно добавить несколько проверок поверх этого eval-а, но гораздо лучшего резултата можно добиться написав нормальную логику. Там кода всего несколько десятков строк. И скорее всего ваше задание и предполагало смотстоятельное ее написание.

    Если самостоятельно сложно написать логику кажется непосильной задачей - возьмите тогда готовую библиотеку. Это будет намного лучше, чем пародия с eval-ом.

    P.S.: модераторы, вы когда переносите втихаря ответ в комментарии, а в это время его дополняю, то после нажатия "сохранить" все что я набрал исчезает вообще вникуда. Юзабилити - агонь.
    Ответ написан
    Комментировать
  • Почему переменная list не перезаписывается каждую итерацию цикла?

    Stalker_RED
    @Stalker_RED
    А почему вы решили, что она не перезаписывается? Вот добавил одну строчку логирования, и видно как она перезаписывается
    function ListNode(val, next) {
      this.val = (val === undefined ? 0 : val)
      this.next = (next === undefined ? null : next)
    }
    
    let list;
    for(let c=1; c<=5; c++){
      list=new ListNode(c, list); //Я не могу понять, как работает эта строка.
      console.log('val=', list.val, 'next=', list.next); // <---------- вот эту
    }
    console.log(list);


    val= 1 next= null
    val= 2 next= ListNode {val: 1, next: null}
    val= 3 next= ListNode {val: 2, next: ListNode}
    val= 4 next= ListNode {val: 3, next: ListNode}
    val= 5 next= ListNode {val: 4, next: ListNode}
    ListNode {val: 5, next: ListNode}
    Ответ написан
    2 комментария
  • Зачем нужен div.green в моём случае?

    Stalker_RED
    @Stalker_RED
    Читайте про css селекторы. Какие они вообще есть, выборку по тегу, по id, атрибуту, как они комбинируются, что такое селективность (приоритет).
    Ответ написан
    Комментировать
  • Чем отличается наследование в ооп от протипированного наследования?

    Stalker_RED
    @Stalker_RED
    Вопрос некорректный, различий не может быть, так как прототипы - разновидность ООП.

    Отличие с классами есть:
    Прототипное программирование # Сравнение с класс-о...
    В языках, основанных на понятии «класс», все объекты разделены на два основных типа — классы и экземпляры. Класс определяет структуру и функциональность (поведение), одинаковую для всех экземпляров данного класса. Экземпляр является носителем данных — то есть обладает состоянием, меняющимся в соответствии с поведением, заданным классом.

    Сторонники прототипного программирования часто утверждают, что языки, основанные на классах, приводят к излишней концентрации на таксономии классов и на отношениях между ними. В противоположность этому, прототипирование заостряет внимание на поведении некоторого (небольшого) количества «образцов», которые затем классифицируются как «базовые» объекты и используются для создания других объектов. Многие прототип-ориентированные системы поддерживают изменение прототипов во время выполнения программы, тогда как лишь небольшая часть класс-ориентированных систем (например, Smalltalk, Ruby) позволяет динамически изменять классы.

    Хотя подавляющее большинство прототип-ориентированных систем основаны на интерпретируемых языках с динамической типизацией, технически возможно добавить прототипирование и в языки со статической проверкой типов. Язык Omega является одним из примеров такой системы.
    Ответ написан
    1 комментарий
  • Как клонировать информацию столбца Js?

    Stalker_RED
    @Stalker_RED
    function copyColumn() {
      const rows = document.querySelectorAll('table tr.tab'); // находим все строки
      rows.forEach(row => {
        const clone = row.firstElementChild.cloneNode(true); // клонируем первую ячейку вместе с содержимым
        row.insertAdjacentElement('beforeend', clone); // вставляем в конец
      });
    };

    Ответ написан
  • Поиск точного вхождения?

    Stalker_RED
    @Stalker_RED
    Выбрасывайте код, бегите от этого сайта.
    Там для редактирования класса разбивают clssName по пробелами, будто сейчас 2009.

    Возьмите isotope, например.
    Ответ написан
    1 комментарий
  • Как запускать подсчет цифер при открытие tabs?

    Stalker_RED
    @Stalker_RED
    <pre id="cont">0</pre>
    <button id="btnStart">start</button>
    <pre id="cont2">0</pre>
    <button id="btnStart2">start</button>
    
    <script>
    btnStart.onclick = function(){
      autoCounter('#cont', 0, 10050, 12.7);
    };
    btnStart2.onclick = function(){
      autoCounter('#cont2', 100500, 200000, 300);
    };
    
    function autoCounter(selector, from, to, step) {
      const container = document.querySelector(selector);
      let currValue = from;
      tick();
    
      function tick() {
        if (currValue < to) {
          currValue += step;
          if (currValue > to) {
            currValue = to;
          }
          container.textContent = Math.round(currValue);
          window.requestAnimationFrame(tick);
        }
      }
    }
    
    </script>
    Ответ написан
    5 комментариев
  • Как сделать таймер без глобальных переменных?

    Stalker_RED
    @Stalker_RED
    Такой таймер будет отставать - setInterval не гарантирует испольнение функции раз в секуну, он гарантирует, что запуск будет НЕ РАНЬШЕ чем через секунду. И при загрузке ЦП таймер будет отставать.

    Для точной работы надо запоминать время старта, сравнивать с текущим, и уже разницу отображать.

    Ответ написан
  • Как выполнить поиск по странице сайта?

    Stalker_RED
    @Stalker_RED
    Это плохой код. Он ищет эту вашу строку во всех элементах, и при разметке

    <html>
    <body>
     <section>
      <article>
       <h1>
        <span>your text</span>
       </h1>
      </article>
     </section>
    </body>
    </html>

    он кликнет по каждому из этих элементов, так как в каждом их них есть этот текст.
    Если вас это не устраивает. надо как минимум проверять глубину вложенности и кликать только по самому глубокому из найденных.
    Ну и вообще код странный - includes() из ES2015 рядом с давно устаревшими var и document.all.
    Ответ написан
    Комментировать
  • Как сделать так чтобы 1 форма не затрагивала SELECT 2 формы?

    Stalker_RED
    @Stalker_RED
    Вам кто-то изрядную свинью подложил, когда научил вот так вот ставить id на все элементы подряд, привязывая к ним ещё какие-то циферки и btnid. Вангую, что вся проблема из-за путаницы с id. Скорее всего они у вас дублируются.

    И более половины кода можно смело выбросить, т.к. он не несёт смысловой нагрузки.
    Все строки с val(), все с val(""), text() и скорее всего с css("display"...) тоже.

    Покажите разметку, а ещё лучше соберите пример на jsfiddle или codepen.
    Ответ написан
    Комментировать
  • Как перенести текст статьи из .txt в html?

    Stalker_RED
    @Stalker_RED
    const targetBlock = document.querySelector('#foo');
    fetch('bar.txt')
      .then(response => response.text())
      .then(text => targetBlock.innerHTML = text.replaceAll('\n', '<br>'));
    Ответ написан
    Комментировать
  • Функция, удваивающая числовые свойства объекта. Зачем return?

    Stalker_RED
    @Stalker_RED
    Вот вам без return
    let menu = {
       width: 200,
       height: 300,
       title: "My menu"
     };
    
    function multiplyNumeric(obj) {
       for(key in obj) {
          if (typeof obj[key] === 'number') {
             obj[key] *= 2;
          }
       }
    }
     
    multiplyNumeric(menu); // изменили размер
    console.log(menu); // вывели

    Теперь если написать console.log(multiplyNumeric(menu)); то в консоль выведется undefined, потому что вы в консоль выводите возвращаемое значение функции multiplyNumeric, а когда она ничего не возвращает, то и выводится undefined.
    Обратите внимание, что multiplyNumeric не нужно ничего возвращать.

    Так зачем вы добавили return?
    Ответ написан
    Комментировать
  • Что значит this.words[word]?

    Stalker_RED
    @Stalker_RED
    Отложите пока изучение классов. Разберитесть что такое объекты, что за ключи, и как добавлять и читать значения используя эти ключи.
    Ответ написан
    Комментировать
  • Как установить значение options при загрузке страницы через 1 сек?

    Stalker_RED
    @Stalker_RED
    setTimeout(function(){
      const select = document.querySelector('select');
      select.value = 1
    }, 1000); // 1000ms = 1s
    Ответ написан
  • Как при открытии одного select закрыть другой?

    Stalker_RED
    @Stalker_RED
    Возможно будет правильнее не "закрыть другие селекты", а "закрывать селект при клике вне его выпадающего списка".

    Таким образом вы решите не только проблему нескольких открытых селектов, но и "открыли селект, потом кликаем где-то по другим полям, но селект не закрылся и мешает".

    Также можно прикрутить закрытие по esc.
    Ответ написан
    Комментировать
  • Как определить в строке символы и заменить их?

    Stalker_RED
    @Stalker_RED
    const result = 'Работа не волк, работа это ворк, волк это ходить'.replace(/[ ,]+/g, ' | '); 
    
    // -> ''Работа | не | волк | работа | это | ворк | волк | это | ходить'
    Это вы хотите?
    Ответ написан
    1 комментарий
  • Как отложить запрос к апи во время кликов на кнопку?

    Stalker_RED
    @Stalker_RED
    throttle / debounce

    Что это вообще такое?
    Троттлинг функции означает, что функция вызывается не более одного раза в указанный период времени (например, раз в 10 секунд). Другими словами ― троттлинг предотвращает запуск функции, если она уже запускалась недавно. Троттлинг также обеспечивает регулярность выполнение функции с заданной периодичностью.

    Debouncing функции означает, что все вызовы будут игнорироваться до тех пор, пока они не прекратятся на определённый период времени. Только после этого функция будет вызвана. Например, если мы установим таймер на 2 секунды, а функция вызывается 10 раз с интервалом в одну секунду, то фактический вызов произойдёт только спустя 2 секунды после крайнего (десятого) обращения к функции.

    https://www.google.com/search?q=js+throttle+debounce
    https://medium.com/nuances-of-programming/%D1%87%D...
    Ответ написан
    3 комментария
  • Срабатывают оба условия if при клонировании формы через cloneNode?

    Stalker_RED
    @Stalker_RED
    Сейчас при нажатии + add item навешиваются обработчики на все айтемы.
    Проверьте - когда один айтем, все работает. Добавляете второй айтем, и у ВТОРОГО работает правильно, а у первого меняется дважды.
    Добавьте третий - теперь третий работает правильно, у второго двойное срабатывание, а у первого уже тройное!
    Потому что changeBtns.forEach(...)

    Читайте про делегирование событий.
    Вешаете сразу один обработчик, не на все кнопки, и даже не наодну кнопку, а на форму!
    Внутри обработчика по event.target определяйте куда кликнули, в какой группе была эта кнопка, и переключайте состояние.
    Ответ написан
    1 комментарий