Ответы пользователя по тегу JavaScript
  • Как получить название функции?

    Exomode
    @Exomode
    Архитектор ПО
    function test() {  alert(arguments.callee.name); } 
    b = test; 
    b();

    В данном случае, получение имени работает статически для всего объявления. Если вам нужно получить имя динамически из экземпляра объекта, используйте один из следующих способов:
    b.toString();
    или
    alert(b.name);
    Ответ написан
    Комментировать
  • Как сделать открытие отдельного html файла в responce.write(``);?

    Exomode
    @Exomode
    Архитектор ПО
    А почему через fs у вас не получилось? Должно работать
    var fs = require('fs'),
        path = require('path'),    
        filePath = path.join(__dirname, 'start.html');
    
    fs.readFile(filePath, { encoding: 'utf-8' }, function(err,data){
        if (!err) {
            console.log('received data: ' + data);
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.write(data);
            response.end();
        } else {
            console.log(err);
        }
    });
    Ответ написан
  • Как сделать переход на якорь выше на 40 пикселей?

    Exomode
    @Exomode
    Архитектор ПО
    Добавьте вашему блоку CSS-свойство transition для того, чтобы переходы между значениями интерполировались и визуально всё выглядело плавно. Например:
    transition: all 350ms ease-in-out;
    Ответ написан
    4 комментария
  • Как получать повторный алерт после закрытия старого?

    Exomode
    @Exomode
    Архитектор ПО
    Следует понимать, что ваш код отрабатывает в рантайме линейно и большинство проверок отработают сразу после загрузки DOM. Если вам нужно, чтобы проверки и события работали уже после загрузки документа отложенно, вам необходимо изменить логику вашего кода. Например, повесить вашу проверку и показ алерта на таймаут или событие клика кнопки, тогда алерт будет показываться по условию уже после загрузки документа.
    Ответ написан
    Комментировать
  • Как предотвратить повторную обработку события в самописном плагине jQuery?

    Exomode
    @Exomode
    Архитектор ПО
    event.preventDefault();
    или просто логику подписи событий приведите в порядок.
    Ответ написан
    Комментировать
  • Как сделать пролистывание nav если активный элемент 30vh от нижнего края экрана?

    Exomode
    @Exomode
    Архитектор ПО
    Если вам нужно, чтобы элементы nav были зафиксированы на определенном уровне страницы - зафиксируйте их с помощью CSS-свойства position. Для обработки скроллинга вам хватит события scroll. Проверяете там смещение страницы и положение ваших блоков относительно этого смещения, строите нужную вам логику на основе этого.

    scroll по некоторым причинам (таким как некорректная работа скрипта и визуально некрасиво) использовать нельзя

    скорее всего, это связано с тем, что предыдущие примеры у вас были неверно адаптированы или была некорректная логика поведения, т.к. подобные задачи решаются именно таким способом, никак иначе.
    Ответ написан
    Комментировать
  • Как декодировать такой текст?

    Exomode
    @Exomode
    Архитектор ПО
    Это обычный вид кодировщика UTF-8. У вас на клиенте обычно такой текст должен быть сразу в декодированном виде. Если вы хотите, чтобы сервер уже сразу отдавал ответ в корректном виде кириллицы, нужно будет подправить ответ сервера, вот пример того, как можно это сделать:
    function response($data = []) {
        header("Content-Type: application/json; charset=utf-8");
    
        $flags = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_PRETTY_PRINT;
    
        $fails = implode('|', array_filter([
            '\\\\',
            $flags & JSON_HEX_TAG ? 'u003[CE]' : '',
            $flags & JSON_HEX_AMP ? 'u0026' : '',
            $flags & JSON_HEX_APOS ? 'u0027' : '',
            $flags & JSON_HEX_QUOT ? 'u0022' : '',
        ]));
    
        $pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/";
    
        $callback = function ($m) {
            return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8');
        };
        
        echo preg_replace_callback($pattern, $callback, json_encode($data, $flags));
        exit;
    }
    
    response([ "data" => "Здесь русские буквы!" ]);
    Ответ написан
    Комментировать
  • Как раскодировать json из unicode на JS?

    Exomode
    @Exomode
    Архитектор ПО
    Если хотите чтобы кириллица сразу отдавалась в правильном виде в ответе:
    function response($data = [] {
        header("Content-Type: application/json; charset=utf-8");
    
        $flags = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_PRETTY_PRINT;
    
        $fails = implode('|', array_filter([
            '\\\\',
            $flags & JSON_HEX_TAG ? 'u003[CE]' : '',
            $flags & JSON_HEX_AMP ? 'u0026' : '',
            $flags & JSON_HEX_APOS ? 'u0027' : '',
            $flags & JSON_HEX_QUOT ? 'u0022' : '',
        ]));
    
        $pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/";
    
        $callback = function ($m) {
            return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8');
        };
        
        echo preg_replace_callback($pattern, $callback, json_encode($data, $flags));
        exit;
    }

    А вообще, на стороне клиента уже всё будет корректно раскодировано и о перекодировании можно не заботиться.
    Ответ написан
    Комментировать
  • Как на js изменять цвет div в зависимости от выданной цифры(значения)?

    Exomode
    @Exomode
    Архитектор ПО
    Регуляркой парсить то число что у вас там в скобках, иначе никак. Но сразу скажу, что это костыль костылей. Куда лучше передать с сервера сразу в разметке эту информацию, например:
    <div class="user" data-count="число_генерируется_движком">{news}</div>

    после этого вам останется лишь сделать что-то в роде:
    $(".user").each(function (i, e) {
      var count = $(e).attr("data-count");
      // далее делаете с этим числом что хотите.
    });
    Ответ написан
    5 комментариев
  • Как задать класс блоку, при достижении прописанного id?

    Exomode
    @Exomode
    Архитектор ПО
    Здесь то что вам нужно. Я уже неоднократно отвечал на этот вопрос здесь. В сети есть целая куча всевозможных вариаций решения вашей задачи, достаточно лишь погуглить. По сути, всё сводится к тому, что в обработчике пролистывания страницы вам нужно проверять позицию нужного элемента на экране, вы проверяете его смещение относительно позиции скролла. Когда координаты смещения удовлетворяют условию, вы выполняете требуемое вам действие. Это одна из самых тривиальных задач jQuery.
    Ответ написан
  • Как, проскролив определенную высоту, поменять background у дива с классом header?

    Exomode
    @Exomode
    Архитектор ПО
    В обработчике скроллинга поставьте проверку на позицию скроолинга относительно текущего блока на экране, если условие верно, то просто меняете стиль блока меню background: #fff; color: #000;
    Ответ написан
    Комментировать
  • Как обновлять фукнкцию каждую секунду и перематывать страницу в самый низ?

    Exomode
    @Exomode
    Архитектор ПО
    Для вызова функции по таймеру используйте setInterval(callback, timeout, args), для перемотки отрабатывайте событие scroll.
    Ответ написан
    Комментировать
  • Как передать массив данных json php в html через Jquery правильно?

    Exomode
    @Exomode
    Архитектор ПО
    Пример серверсайда:
    function response($data = []) {
        header("Content-Type: application/json; charset=utf-8");
    
        $flags = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_PRETTY_PRINT;
    
        $fails = implode('|', array_filter([
            '\\\\',
            $flags & JSON_HEX_TAG ? 'u003[CE]' : '',
            $flags & JSON_HEX_AMP ? 'u0026' : '',
            $flags & JSON_HEX_APOS ? 'u0027' : '',
            $flags & JSON_HEX_QUOT ? 'u0022' : '',
        ]));
    
        $pattern = "/\\\\(?:(?:$fails)(*SKIP)(*FAIL)|u([0-9a-fA-F]{4}))/";
    
        $callback = function ($m) {
            return html_entity_decode("&#x$m[1];", ENT_QUOTES, 'UTF-8');
        };
        
        echo preg_replace_callback($pattern, $callback, json_encode($data, $flags));
        exit;
    }
    
    response([ "a" => "b", ]);


    Пример клиентсайда:
    $.post('/some_page.php?', post).done(function (response) {
      // обработчик json, в переменной response сразу распарсенный объект благодаря заголовку Content-Type: application/json
                }).fail(function(xhr, status, error) {
                    console.error(error); // обработчик ошибки ответа сервера
                });

    По аналогии с методами $.get и .$ajax.
    Ответ написан
    Комментировать
  • Объекты. Как получить ключ объекта и ключ вложенного объекта?

    Exomode
    @Exomode
    Архитектор ПО
    $json = json_decode($response, true);

    второй аргумент метода вернет вам сразу словарь вместо объекта, с ключами вместо имен полей объекта. Можете его перебирать в цикле как хотите и делать с ним что угодно уже
    Ответ написан
  • Как сменить background-image по таймеру?

    Exomode
    @Exomode
    Архитектор ПО
    На сколько я помню, в нативном js стиль у элемента идет как обычный string, а не словарь. Попробуйте поменять это
    s.backgroundImage = 'url('+bg[i]+')';
    на вот это
    s += "background-image: url("+bg[i]+");";
    Ответ написан
  • Почему ошибка в async функции?

    Exomode
    @Exomode
    Архитектор ПО
    //тут запрос для тестов
    import Api from './index';

    export default {
    getInfo () {
    return Api.get('https://api.coindesk.com/v1/bpi/currentprice.json')
    }
    }


    так а сам метод get() у вас где? тут только getInfo()
    Ответ написан
    Комментировать
  • Как открыть окно с фиксированными размерами через js или html?

    Exomode
    @Exomode
    Архитектор ПО
    <a href="/index2.php?option=com_jumi&amp;fileid=3&amp;Itemid=11"
       onclick="window.open(this.href,'targetWindow',
                                       'toolbar=no,
                                        location=no,
                                        status=no,
                                        menubar=no,
                                        scrollbars=yes,
                                        resizable=yes,
                                        width=SomeSize,
                                        height=SomeSize');
     return false;">Popup link</a>
    Ответ написан
    Комментировать
  • Почему при загрузке сайта на хостинг вечная прокрутка анимации, на локалке все норм?

    Exomode
    @Exomode
    Архитектор ПО
    c532a6389d8d45db9cee6bed36d20243.PNG У меня в опере всё загрузилось. проверьте на вечной загрузке у себя в инспекторе консоль, возможно там ошибки валит, они помогут понять в чём дело. Из-за них может не срабатывать триггер скрытия анимации загрузки.
    Ответ написан
  • Зачем нужно событие change jQuery?

    Exomode
    @Exomode
    Архитектор ПО
    Затем, что прежде чем изучать фреймворк к языку, сперва стоит изучить сам язык. В JavaScript есть ряд событий, таких как onclick, onsubmit, onload и тд, onchange среди них. Событие происходит, когда значение input, select или textarea меняется. В jQuery существуют методы-обёртки над этими событиями, которые можно удобно использовать. $(e).click() вызовет событие клика, а $(e).click(function () { }) повесит на событие onclick обработчик - коллбэк, переданный первым аргументом метода. Помимо этого, есть ещё метод on(), который позволяет прицепить обработчики сразу к ряду селекторов, например $(document).on("change", "input, select, textarea", function (e) { }).
    Ответ написан
    3 комментария
  • Как сохранить класс активной ссылки после перезагрузки страницы?

    Exomode
    @Exomode
    Архитектор ПО
    Можно сохранить параметр в куку, можно привязаться к хешу урла, после перезагрузки он никуда не исчезнет и можно будет проверить наличие:
    var hash = window.location.hash;
    var selectedOption = null;
    
    if (hash && hash != '#') {
      var parts = hash.split('=');
    
      if (parts.length == 2 && parts[0] == "select_option") {
        selectedOption = parts[1];
      }
    }

    Дальше просто присвоить свойство selected селектору "select option[name='" + selectOption + "']" при загрузке страницы, а в onchange списка обновлять хэш. Не часто вижу чтобы подобное решение применялось, но иногда оно вписывается куда элегантнее и проще, чем даже те же куки, которые можно очистить и всё слетит, или вообще отключить. Хэши напоминают строку GET-запроса, только работают исключительно в рамках клиентсайда.

    Эти два варианта подойдут для сугубо клиентской привязки. Можно еще и с помощью сервера организовать, сразу отдавать на клиент разметку с выделенным элементом списка в зависимости от параметра запроса или куки, или сессии, как угодно.

    Вместо списков можно применить к любому элементу, достаточно лишь изменить селектор и вместо свойства selected использовать атрибут классов, к примеру. Всё от вашей фантазии зависит, решений здесь много.
    Ответ написан
    Комментировать