Задать вопрос
  • Как изменить цвет шрифта в консольном приложении?

    0xD34F
    @0xD34F
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, color);

    color: старшие четыре бита - цвет фона, младшие - цвет текста
    Ответ написан
    4 комментария
  • Какой запрос тут нужен к таблице mysql?

    0xD34F
    @0xD34F
    SELECT p.*
    FROM users u
    JOIN favorites f ON f.userid = u.id
    JOIN products p ON p.id = f.videoid
    WHERE u.id = 1
    Ответ написан
    Комментировать
  • Как построить SQL запрос, чтобы вывести один результат из прошедших дат, и несколько из будущих?

    0xD34F
    @0xD34F
    SELECT `date`
    FROM `foo`
    WHERE `id` >= (
      SELECT `id`
      FROM `foo`
      WHERE `date` < now()
      ORDER BY `id` DESC
      LIMIT 1
    )

    Это конечно в предположении, что даты расположены последовательно. Если нет - то можно, например, отдельно выбрать последнюю прошедшую и отдельно все будущие и объединить их union'ом.
    Ответ написан
    1 комментарий
  • Как сделать выборку в MySQL фильтрации значений, идущих подряд?

    0xD34F
    @0xD34F
    Можно так:

    SELECT t2.s1
    FROM (
      SELECT
        t1.id,
        t1.s1,
        IF (@max = 1, @max := t1.seq, @max := @max) AS "max1",
        IF (t1.seq = 1, @max := 1, @max := @max) AS "max2"
      FROM (
        SELECT
          (SELECT @id := @id + 1) AS "id",
          s1,
          IF (s1 = @prev + 1, @seq := @seq + 1, @seq := 1) AS "seq",
          (SELECT @prev := s1) AS "prev"
        FROM `table`,
        (SELECT @id := 0, @seq := 0, @prev := null) AS init
      ) AS t1,
      (SELECT @max := 1) AS init
      ORDER BY t1.id DESC
    ) AS t2
    WHERE t2.max1 >= 3
    ORDER BY t2.id

    Ещё можно добавить в таблицу дополнительный столбец, в котором будет храниться количество записей, принадлежащих к текущей серии последовательных значений и заполнять/обновлять его в триггере, при вставке новых записей в таблицу. Тогда таблица будет выглядеть как-то так:

    s1 | n
     1   3
     2   3
     3   3
     7   1
    12   1
    22   2
    23   2
     5   4
     6   4
     7   4
     8   4

    А получение нужных записей будет совсем тривиальным:

    SELECT s1 FROM `table` WHERE n > 2
    Ответ написан
    Комментировать
  • Как ускорить анимацию чисел в зависимости от числа?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Можно задавать шаг отдельно для каждого счётчика, так же, как и максимальное значение - в атрибуте:

    <div data-num="2350" data-step="5" class="number">0</div>

    $(window).scroll(function() {
      var $win = $(window);
    
      if ($('#counter').offset().top < $win.scrollTop() + 200) {
        $win.off('scroll');
    
        $('.number').addClass('viz').each(function() {
          var
            i = 0,
            num = +this.dataset.num,
            timeStep = 1000 / num,
            valStep = +this.dataset.step || 1,
            interval = setInterval(function($el) {
              if ((i += valStep) >= num) {
                clearInterval(interval);
              }
    
              $el.html(Math.min(i, num));
            }, timeStep, $(this));
        });
      }
    });

    Или вычислять шаг:

    var steps = 100;
    
    $(window).scroll(function() {
      var $win = $(window);
    
      if ($('#counter').offset().top < $win.scrollTop() + 200) {
        $win.off('scroll');
    
        $('.number').addClass('viz').each(function() {
          var
            i = 0,
            num = +this.dataset.num,
            valStep = num / steps,
            interval = setInterval(function($el) {
              if ((i += valStep) >= num) {
                clearInterval(interval);
              }
    
              $el.html(Math.floor(Math.min(i, num)));
            }, 20, $(this));
        });
      }
    });
    Ответ написан
    1 комментарий
  • 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 Куратор тега Регулярные выражения
    Как-нибудь так, например: /^[1-9][0-9]*([a-z]|[а-я]|(\/[1-9][0-9]*))?$/i
    Ответ написан
    Комментировать
  • Как правильно настроить 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);
    Ответ написан
    Комментировать