Задать вопрос
  • JavaScript: почему не срабатывает скрипт?

    0xD34F
    @0xD34F Куратор тега JavaScript
    • Метод querySelectorAll возвращает коллекцию элементов, никакого addEventListener у неё нет - его надо вызывать отдельно у каждого элемента.
    • Что ещё за e.classList? e - это объект события, а не элемент DOM-дерева.
    • Класс добавляете, OK - а где же удаление? Вряд ли вам нужно, чтобы элементы могли иметь оба класса одновременно.

    Насколько я понял, вам нужно нечто такое:

    const elems = document.querySelectorAll('nav#menu_3 > ul > li');
    
    elems.forEach(n => n.addEventListener('mouseover', onMouseover));
    
    function onMouseover() {
      elems.forEach(n => {
        n.classList.toggle('zoomed', this === n);
        n.classList.toggle('nozoomed', this !== n);
      });
    }
    Ответ написан
  • Сложный запрос mysql в node.js?

    0xD34F
    @0xD34F
    Ваш запрос после подстановки значений выглядит как-то так:

    INSERT INTO Items SET `itemid` = 'SELECT MAX(`itemid`) FROM `Items`', ...

    То есть, код запроса для получения значения itemid оказывается взят в кавычки - никакого запроса не происходит, в itemid пишется строка. Что, по-видимому, является причиной ошибки - itemid, это ведь число, да? Как сделать вставку sql кода в запрос из переменной я сам без понятия, и вообще не уверен, что такое можно сделать.

    Кроме того, есть и другая проблема. Если вы попробуете вручную выполнить ваш запрос (через phpmyadmin или ещё как), то получите сообщение о синтаксической ошибке - получение значения itemid следует окружить круглыми скобками:

    (SELECT MAX(`itemid`) FROM `Items`)

    Ладно, поставили скобки. Теперь-то всё хорошо? Никак нет - получаем ошибку "You can't specify target table 'Items' for update in FROM clause". Корректная вставка в таблицу с получением данных из этой же таблицы будет выглядеть примерно так:

    INSERT INTO Items(itemid, title, type)
    SELECT MAX(itemid), <значение для title>, <значение для type> FROM Items

    В общем, попробуйте что-нибудь вроде этого:

    connection.query('INSERT INTO Items(itemid, title, type) SELECT MAX(itemid), ?, ? FROM Items', [ data.title, data.group ])
    Ответ написан
  • Открытие блоков независимо друг от друга??

    0xD34F
    @0xD34F Куратор тега JavaScript
    Кнопкам дать общий класс, а для понимания, какая кого должна открывать, добавить data-атрибут, содержащий соответствующий селектор; Спискам, видимость которых надо переключать, тоже дать общий класс:

    <a href="#" class="menu-trigger" data-list="#menu">Menu</a>
    <a href="#" class="menu-trigger" data-list="#contacts">Contacts</a>
    <ul id="menu" class="list">...</ul>
    <ul id="contacts" class="list">...</ul>

    При нажатии на кнопку прячете все списки, кроме связанного с нажатой кнопкой - его состояние изменяете на противоположное:

    $('.menu-trigger').click(function() {
      var list = this.dataset.list;
    
      $(this).parent().find('.list').not(list).slideUp(0);
      $(list).slideToggle(500);
    });
    
    $(window).resize(function() {
      if ($(window).width() > 500) {
        $('.list').removeAttr('style');
      }
    });

    https://jsfiddle.net/nvgpfm7j/
    Ответ написан
    Комментировать
  • Как достать ключи и значения из многомерного массива?

    0xD34F
    @0xD34F
    думал через Foreach в foreach, но не пашет

    Это как? Отлично всё пашет:

    foreach ($arr as $val) {
      foreach ($val['items'] as $item) {
        // хватаем item_code, например: $item['item_code']
      }
    }
    Ответ написан
    1 комментарий
  • Как по клику добавлять класс следующим 4 элементам??

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('селектор кнопки').click(function() {
      $('селектор-элементов')
        .not('.класс')
        .slice(0, количествоЭлементовКоторымНадоДобавитьКласс)
        .addClass('класс');
    });

    или

    const items = [...document.querySelectorAll('селектор элементов')];
    
    document.querySelector('селектор кнопки').addEventListener('click', () => {
      items
        .splice(0, количествоЭлементовКоторымНадоДобавитьКласс)
        .forEach(n => n.classList.add('класс'));
    });
    Ответ написан
    Комментировать
  • Как получить элемент innerText внутри дочернего объекта?

    0xD34F
    @0xD34F Куратор тега JavaScript
    пытался получить так:
    console.log($('.wall_post_text', this)).innerText;
    Но пишет undefined

    Во-первых, опечатка - .innerText надо внутри внешних скобок было разместить, а так вы у результата вызова console.log хотите свойство прочитать (и получаете вы никакой не undefined, а ошибку "cannot read properties of undefined").

    Во-вторых, значение свойства innerText надо получать у DOM-элемента, а не jquery объекта. Ну или замените обращение к свойству на вызов метода.

    Исправляем:

    $('.wall_post_text', this)[0].innerText
    // или
    $('.wall_post_text', this).get(0).innerText
    // или
    $('.wall_post_text', this).prop('innerText')
    // или
    $('.wall_post_text', this).eq(0).text()
    // или
    $('.wall_post_text:eq(0)', this).text()
    // или, если элемент .wall_post_text внутри this один
    $('.wall_post_text', this).text()
    Ответ написан
    1 комментарий
  • JQuery и post запрос?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вместо return json_encode($result) наверное должно быть что-то вроде echo json_encode($result). Также непонятно, почему никак не обрабатывается ситуация, когда name и email отсутствуют.

    Ещё неплохо бы добавить header('Content-Type: application/json');. Всё-таки json возвращаете.

    Удалить ?> тоже не помешает - чтобы случайно не добавлять пробелы/пустые строки в ответ.

    В ajax.js dataType: "html" было бы неплохо заменить на dataType: "json" - по получении ответа не придётся вызывать parseJSON, response будет объектом.
    Ответ написан
    6 комментариев
  • Почему возвращает window?

    0xD34F
    @0xD34F Куратор тега JavaScript
    в чем тут логика?

    Да ни в чём. Один из подводных камней языка. Типа, значение this должно всегда быть объектом, а для null/undefined, в отличие от строк/чисел/bool нет объектных обёрток, поэтому вот такой костыль. В строгом режиме работает как надо:

    (function() {
      'use strict';
      var func = function() { console.log(this); };
      func.call(null); // выведет null
    })();
    Ответ написан
    Комментировать
  • Как достать значение объекта?

    0xD34F
    @0xD34F Куратор тега JavaScript
    var
      path = 'aaa.bbb.ccc.ddd',
      data = {
        aaa: {
          bbb: {
            ccc: {
              ddd: 'Hello!!'
            }
          }
        }
      };
    
    console.log(path.split('.').reduce((p, c) => p[c], data)); // Hello!!
    Ответ написан
    2 комментария
  • Как сделать регулярное выражение для валидации номера дома?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    const reg = /^[1-9]\d*([a-zа-яё]|(\/[1-9]\d*))?$/i;
    
    
    // ok
    [ '78', '8', '99a', '82/4' ].every(n => reg.test(n)) // true
    
    // не ok
    [ 'a1', '2/', '3/b', '4c/', '5/6/7', '8d9' ].every(n => !reg.test(n)) // true
    Ответ написан
    Комментировать
  • Как правильно настроить Legend для chart.js?

    0xD34F
    @0xD34F
    У labels нет свойства position, оно относится к legend. То есть, должно быть так:

    legend: {
      position: 'bottom',
      labels: {
        fontColor: 'black',
        fontFamily: 'Calibri Light',
        fontStyle: 'italic'
      }
    }

    То же касается и свойства display.
    Ответ написан
    Комментировать
  • Как сделать плавно переходящий полу-прозрачный фон?

    0xD34F
    @0xD34F Куратор тега CSS
    Градиент от прозрачного к < имя цвета > и обратно к прозрачному, например:

    background: linear-gradient(to right, transparent 10%, red 30%, red 70%, transparent 90%);
    Ответ написан
    3 комментария
  • Как правильно работать с графиками?

    0xD34F
    @0xD34F
    Добавьте данные за август - labels у вас 8 штук, а в data всего лишь семь элементов.
    Ответ написан
    Комментировать
  • Метод .splice() портит оригинальный массив. Как этого избежать?

    0xD34F
    @0xD34F Куратор тега JavaScript
    При присваивании копируется ссылка на массив, а не сам массив. Чтобы скопировать массив, есть варианты:

    var copy = arr.slice();

    var copy = arr.concat();

    var copy = [...arr];

    var copy = Array.from(arr);
    Ответ написан
    Комментировать
  • Что пошло не так(простая задача)?

    0xD34F
    @0xD34F Куратор тега JavaScript
    При первом вычислении newFib принимает значение 3 (2 + 1, ага), затем проверка остатка от деления на 2 на равенство единице оказывается истинной и происходит переход к следующей итерации цикла. Снова вычисляется newFib - на основе тех же значений, 2 + 1, снова остаток от деления равен единице - идём на следующий круг и так далее.

    Это к вопросу о том, почему цикл не останавливается. А вообще - "пошло не так" у вас в тот момент, когда появилась вот эта безумная конструкция из while(true), break'а в конце тела цикла и continue-костыля, заставляющего цикл работать как цикл.
    Ответ написан
    Комментировать
  • Странное поведение mysql при update для нескольких условиях в set. Так и должно быть?

    0xD34F
    @0xD34F
    Говорят, что так и должно быть. В MySQL. Что вообще говоря, является нестандартным поведением.

    The second assignment in the following statement sets col2 to the current (updated) col1 value, not the original col1 value. The result is that col1 and col2 have the same value. This behavior differs from standard SQL.

    UPDATE t1 SET col1 = col1 + 1, col2 = col1;
    Ответ написан
    Комментировать
  • Почему IE 11 ругается на синтаксическую ошибку?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Говорят, IE не поддерживает arrow functions.
    Ответ написан
    3 комментария
  • Как удалить первый элемент массива в localStorage?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Попробуйте так:

    if (i > 10) {
      history.shift();
    }

    Что до вашего localStorage.removeItem(history[0]), то это не удаление нулевого элемента массива, хранящегося в localStorage, а удаление из localStorage свойства с именем, соответствующим значению нулевого элемента массива history.
    Ответ написан
  • Как в SQL проверить в одной таблице у одинаковых полей?

    0xD34F
    @0xD34F
    Как-нибудь так, например:

    SELECT a.name, a.ids
    FROM (
      SELECT name, GROUP_CONCAT(id) AS ids, count(*) AS num
      FROM Address
      GROUP BY name
    ) AS a
    WHERE a.num > 1

    Два столбца, в первом - name, которые встречаются более одного раза, во втором - соответствующие им id
    Ответ написан
    Комментировать