Ответы пользователя по тегу JavaScript
  • Почему не срабатывает условие if else?

    Adamos
    @Adamos
    let buttonsOperations = document.querySelectorAll('input[type=radio]:checked');
    if(buttonsOperations.length > 0) {
            calculatorOperator(buttonsOperations[0].getAttribute('data-operation'));
    } else {
            output.innerHTML = '<strong>Ошибка!</strong> Арифметическая операция не выбрана.';
    }
    Ответ написан
    Комментировать
  • Не работает отправка почтой AJAX?

    Adamos
    @Adamos
    <button type="submit" name="submit"
    $('#form').on('submit', function () {
                var form_data = $(this).serialize();

    Вот тогда в form_data, может быть, и попадут данные из формы
    Ответ написан
  • Как сжать алгоритм обхода дерева?

    Adamos
    @Adamos
    Не проще один раз обойти дерево и составить таблицу
    {
    proj.id : [ loc.value, reg.value, sub.value, geo.value ],
    ...
    }
    Или наоборот,
    {
    value : [ ... arrOfValues ... ],
    ...
    }
    И быстро искать по ней, а не скакать по дереву на каждое onChange?
    Ответ написан
    2 комментария
  • Есть ли готовые решения для сайта по работе с таблицами на подобие exсel?

    Adamos
    @Adamos
    Заказчики не могут выйти из плоскости - они ни черта, кроме Ёкселя, не видели, и не представляют себе, что данные можно обрабатывать по-другому. Покажите ему какие-нибудь CRM и попробуйте вместе понять, какие данные ему реально нужно обрабатывать и как. И ему польза, и вам работа...
    Ответ написан
    3 комментария
  • Стоит ли передавать значение переменной из php в js?

    Adamos
    @Adamos
    window.myPurposes = {
      someVar: <?php echo $some_value;?>;
    }

    Просто чтобы не засорять глобальное пространство. Ну, и со временем туда же можно ввалить функции и прочее.
    А можно, как уже отметили, сделать и
    window.myPurposes = <?php echo json_encode($arr); ?>;
    Ответ написан
    Комментировать
  • Как уменьшить выделение памяти и избавиться от замыканий?

    Adamos
    @Adamos
    window.myObject = {
      urls: ['http://site1.com', 'http://site2.com'],
      sum: '',
      indx: 0,
      add: function(str) {
        this.sum += str;
        if(++this.indx < this.urls.length) {
          this.run();
        } else {
          alert('Result is ' + this.sum);
        }
      },
      run: function() {
        let xhr = new XMLHttpRequest();
        xhr.open('GET', this.urls[this.indx]);
        xhr.send();
        xhr.onload = function() { window.myObject.add(xhr.result[0]); }
      }
    };
    window.myObject.run();
    Ответ написан
    Комментировать
  • Какую выбрать книгу для изучения JavaScript?

    Adamos
    @Adamos
    Свежий Флэнаган (6-е издание).
    И серьезная база, и не устарел.
    Ответ написан
    5 комментариев
  • Как автоматически создавать пустые файлы внутри созданной папки?

    Adamos
    @Adamos
    #!/bin/bash
    mkdir -p $1/img
    exts=('sass' 'js' 'pug')
    for ext in ${exts[@]}
    do
    touch $1/$(basename $1).$ext
    done
    Ответ написан
  • Как исходя из URL выполнить скрипт?

    Adamos
    @Adamos
    $(document).ready(function() {
      var hash = window.location.hash;
      if(hash) {
        switchTab(hash);
      }
      $('a.local').click(function() {
        switchTab(this.href.replace(/.*#/, '#'));
        return false;
      });
    });
    
    function switchTab(link)
    {
      $($('a[href="' + link + '"]')[0]).trigger('click');
    }

    Пояснение: скрипт испоьзуется на странице, где сами табы - обычный элемент Bootstrap.
    a.local - это ссылки внутри текста одного таба, переключающие на другой таб (например, первый и открытый по умолчанию таб может быть оглавлением).
    Ответ написан
    1 комментарий
  • JS+October CMS как прописать путь в assets?

    Adamos
    @Adamos
    Запихнуть этот html в partials и подключать на нужной странице в pages или, если он нужен повсеместно - в layouts, как и весь остальный ХТМЛ?
    Ответ написан
    Комментировать
  • Как сделать на сайте блок схему в виде дерева жизни?

    Adamos
    @Adamos
    Один день чтения документации по SVG, например.
    Нет, SVG - это вовсе не обязательно "картинки".
    Есть простой путь - нарисовать пару узлов в Inkscape, сохранить и посмотреть в текстовом редакторе, что получилось, поглядывая в документацию по SVG.
    Ответ написан
    2 комментария
  • Может ли эта уязвимость навредить сайту?

    Adamos
    @Adamos
    Любой ссылки на любой сайт?
    Тогда некто может вписать туда, например, ссылку на SVG с эксплойтом и просто подождать, когда страницу, где эта ссылка отображается, откроет администратор сайта.
    Или если у вас есть "интересные" страницы с GET-запросами, исполнить которые может только администратор - пишем ее адрес туда же и ждем того же.
    Ответ написан
    Комментировать
  • Как на js конвертировать секунды в H:m:s?

    Adamos
    @Adamos
    javascript.ru/date - штатный класс, вообще-то.
    Но если и с ним будут сложности, можно просто вот такую функцию на JS перевести:
    function getHumanTime($seconds) {
            $sign = '';
            if($seconds < 0) {
                $sign = '-';
                $seconds = -$seconds;
            }
            $hours = floor($seconds / 3600);
            $seconds -= 3600 * $hours;
            $minutes = floor($seconds / 60);
            $seconds -= 60 * $minutes;
            return $sign . $hours . ':'
                . (($minutes < 10)? '0' : '') . $minutes . ':'
                . (($seconds < 10)? '0' : '') . (int) $seconds;
        }
    Ответ написан
    Комментировать
  • Как минимизировать код яндекс карт?

    Adamos
    @Adamos
    ЯндексКарта с одним, собственно, объектом - адресом компании

    Заменяется на скриншот этой карты, щелчок по которому открывает страницу с полноценной картой. И все летает.
    Ответ написан
    Комментировать
  • Как правильно писать на ООП?

    Adamos
    @Adamos
    ООП - это компьютерная мечта о дамской сумочке. Которая большая внутри и крошечная снаружи.
    Главное в хорошем классе - это интерфейс, позволяющий вообще не думать о том, что находится внутри класса.
    Представьте себе черный ящик, решающий вашу задачу. Сформулируйте, каких внешних данных ему должно быть достаточно и какими внешними же признаками и логикой должен обладать этот ящик. Старательно абстрагируясь от того, что там будет происходить внутри (процедурное программирование приучает думать об этом, придется напрячься).

    Простейший пример - jQuery.cookies. Кукисы в браузере хранятся неудобно для редактирования, но это проблемы внутри черного ящика, снаружи их быть не должно. Снаружи вам надо поставить куку и прочитать куку. С коротким списком возможных свойств. Вот это класс и реализует, вполне успешно. Буквально одним методом.
    Мог бы этот метод быть простой процедурой? Да, конечно. Но как раз это - неважно.
    Ответ написан
    2 комментария
  • Переадресация после оплаты Robokassa?

    Adamos
    @Adamos
    Пользователь зашел к вам на сайт.
    Создал заказ, вы отправили его на Робокассу оплачивать.
    Он там оплатил, Робокасса вернула его к вам на сайт.
    На этот момент никакой информации об оплате вы еще можете не иметь. Оплата через мобильную коммерцию вообще может идти час и более.
    Потом Робокасса дергает-таки ваш обработчик, и вы узнаете об оплате.
    Если пользователь при этом у вас на сайте - вы еще можете ловить это событие и куда-то его перебрасывать. Ну, или в следующий заход.
    Раз вы фронтендер, вам, наверное, нетрудно будет выдать юзеру оповещение о том, что оплата прошла и теперь он может куда-то там перейти.
    Ответ написан
    Комментировать
  • Как избежать race condition при переводе денег?

    Adamos
    @Adamos
    1. получаем баланс пользователя из базы
    2. проверяем хватает ли средств для перевода по полученному балансу в пункте 1
    3. обновляем значения у одного пользователя и другого в базе

    Вообще-то эти действия при желании выполняются одним атомарным запросом UPDATE ... JOIN ... WHERE.
    После которого можно проверить, сколько строк изменил запрос - и либо сохранить информацию об успешно совершенной транзакции (у вас же не только сумма на счетах меняется, правда?), либо вернуть ответ о невозможности перевода.
    Ответ написан
    Комментировать
  • Как уменьшить связанность классов?

    Adamos
    @Adamos
    Точка не должна знать, какие у приложения настройки и в какой контейнер ее запихнули.
    Это контейнер должен уметь выдать список того, что в него запихнули, а рендер - знать настройки.
    Вы слишком много логики засунули внутрь классов, от которых требуется только хранение координат и пар (или списков) точек. Вот и мучаетесь теперь с ними.
    Ответ написан
    2 комментария
  • Редактирование PDF с помощью JavaScript или PHP?

    Adamos
    @Adamos
    Аналогичная задача - на готовый диплом в PDF лепятся данные награжденного и факсимиле.
    $css = "
    div.abs {
        position: absolute;
        line-height: " . $font_size * 3 . "mm;
        text-align: center;
    }
    div.main {
        top: " . $prizer_box[1] . "mm;
        left: " . $prizer_box[0] . "mm;
        width: " . $prizer_box[2] . "mm;
    }
    div.year {
        top: " . $year_box[1] . "mm;
        left: " . $year_box[0] . "mm;
        width: " . $year_box[2] . "mm;
    }
    p.main {
        font-size: " . $font_size . "mm;
        font-family: romul;
        text-transform: uppercase;
    }
    p.user {
        font-size: " . $font_size * 2 . "mm;
        line-height: " . $font_size * 3 . "mm;
        font-family: heinrichscript;
        margin: 0 0 " . $font_size * 3 . "mm 0;
    }
    ";
    
    $html_text = "<div class='abs main'>";
    $html_text .= "<p class='main'>Награждается</p>";
    $html_text .= "<p class='user'>$name<br />$surname</p>";
    $html_text .= "<p class='main'>$award_title<br />$event_title</p>";
    $html_text .= "</div>";
    $html_text .= "<div class='abs year'><p class='main'>$year</p></div>";
    
    $image_path = $_SERVER['DOCUMENT_ROOT'] . '/images/diploma/';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/vendor/mpdf60/mpdf.php';
    $mpdf = new mPDF();
    $mpdf->img_dpi = 300;
    $mpdf->SetImportUse();
    $mpdf->SetSourceFile($image_path . 'Diplom_' . $diploma . '.pdf');
    $tmpl = $mpdf->ImportPage();
    $mpdf->UseTemplate($tmpl);
    $mpdf->charset_in = 'cp1251';
    $mpdf->WriteHTML($css, 1);
    $mpdf->WriteHTML($html_text, 2);
    $mpdf->facsimile = file_get_contents($image_path . 'facsimile_600.png');
    $mpdf->Image('var: facsimile', $fac_x, $fac_y, '50%', '50%');
    $mpdf->Output('diploma.pdf', 'I');
    Ответ написан
    1 комментарий