Ответы пользователя по тегу JavaScript
  • Cтрока в JS не является объектом, почему же у нее есть свойства и методы?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Стро­ки не яв­ля­ют­ся объ­ек­та­ми, так по­че­му же они об­ла­да­ют свой­ст­ва­ми?
    Вся­кий раз ко­гда в про­грам­ме пред­при­ни­ма­ет­ся по­пыт­ка об­ра­тить­ся к свой­ст­ву
    стро­ки s, ин­тер­пре­та­тор Ja­va­Script пре­об­ра­зу­ет стро­ко­вое зна­че­ние в объ­ект, как
    ес­ли бы был вы­пол­нен вы­зов new String(s). Этот объ­ект на­сле­ду­ет
    стро­ко­вые ме­то­ды и ис­поль­зу­ет­ся ин­тер­пре­та­то­ром для дос­ту­па к свой­ст­вам.
    По­сле об­ра­ще­ния к свой­ст­ву вновь соз­дан­ный объ­ект унич­то­жа­ет­ся.
    (От реа­ли­за­ций не тре­бу­ет­ся фак­ти­че­ски соз­да­вать и унич­то­жать этот про­ме­жу­точ­ный объ­ект,
    но они долж­ны вес­ти се­бя так, как ес­ли бы объ­ект дей­ст­ви­тель­но соз­да­вал­ся
    и унич­то­жал­ся.)
    На­ли­чие ме­то­дов у чи­сло­вых и ло­ги­че­ских зна­че­ний объ­яс­ня­ет­ся те­ми же при­чи­на­ми:
    при об­ра­ще­нии к ка­ко­му-ли­бо ме­то­ду соз­да­ет­ся вре­мен­ный объ­ект вы­зо­вом
    кон­ст­рук­то­ра Number() или Boolean(), по­сле че­го про­из­во­дит­ся вы­зов ме­то­да
    это­го объ­ек­та. Зна­че­ния null и undefined не име­ют объ­ек­тов-обер­ток: лю­бые по­пыт­ки
    об­ра­тить­ся к свой­ст­вам этих зна­че­ний бу­дет вы­зы­вать ошиб­ку TypeError.
    Ответ написан
    Комментировать
  • Как отработать ответ ajax (не пойму, как обратиться к массиву)?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    data[0].result
    Ответ написан
    Комментировать
  • Почему код на JsFiddle не работает, а на CodePen работает?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Dymok всё правильно написал.

    В jsfiddle пользовательский скрипт подключается в HEAD секции, а это значит, что Вы ищите кнопки до наступления события DOMContentLoaded. Ваших кнопок попросто ещё не существует.

    В codepen пользовательские скрипты подключаются перед закрытием , а значит Ваши кнопки уже существует и поэтому всё работает
    Ответ написан
    Комментировать
  • Как добавить класс блоку DIV по нажатию на кнопку(data-toggle)?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Просто добавьте еще один селектор в $()

    должно получится $('body', 'div').addClass('top');

    Я, кстати, не увидел где Вы к body, что-либо добавляете.
    Ответ написан
    3 комментария
  • Как узнать какое именно значение таймаута выставлять при ajax запросе?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Странный вопрос, но можно порассуждать.

    Ajax событийно-ориентированный, то есть мы постоянно ждем каких-то событий. Событие загрузки, отправки, ожидания. Получается, что тут не может быть какого-то времени. Мы ждем какого-то события, но ждем как можно раньше.

    Есть ещё такая тема в банковской среде (я только слышал и неручаюсь за эту инфу), что пользователь не любит, когда банковское приложение отвечает быстро. Нажал отправить деньги другу и если ответить, что всё прошло успешно, то пользователь спросит внутри себя - "А как же там транзакции, верификации. Что-то не так. Какой-то гнилой банк". То есть перед ответом нужно подождать, хотя ждать нужно интерфейсу, а не запросу. Запрос пускай ответит быстро, а интерфейс отреагирует через 300ms, а в эти 300ms покажем лоадер.

    Может быть ещё имелось ввиду, что между запросами нужно делать задержку. Объясняю. Есть кнопка "загрузить" на неё можно клинкть пять раз секунду и отправится 5 запросов на сервер. Вот между кликами надо выставлять таймаут, чтобы отправился только один, но опять же это про интерефейс, а не запрос.

    Может быть Вы не правильно поняли вопрос или Вам его донесли не правильно. В любом случае нынешняя формулировка заставляет задать кучу вопросов и Вам бы их следовало задать на собеседование, а не на тостере =) Но Вы в любом случае молодец, так как решили разобраться до конца.
    Ответ написан
    Комментировать
  • Как оставить 10 элементов в массиве и удалить остальные?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {},].slice(0, 10)


    Документация по slice

    Есть ещё splice, но slice возвращает новый массив (не ссылку на исходный), а splice работает с исходным массивом
    Ответ написан
    Комментировать
  • Почему offsetHeight в firefox так считает?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Вам нужно дождаться пока загрузятся все ресурсы, либо только определённые картинки.
    Скорее всего Вы ждёте onload document, а надо window, так как у document нет события load. Про события загрузки вот здесь хорошо написано.

    Вот вам пример, который показывает как решить проблему
    Ответ написан
    Комментировать
  • Зачем нужен дебаг js в webstorm?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Представьте себе такой кейс. Вы пишете компонент, нажимаете ctrl+s, у Вас запускается вотчер, перезагружается браузер и ничего. Код не работает. Вы альттабатесь в браузер, жмакаете f12, console, видите ошибку, заходите в source находите файл, ставите брейкпоинт, понимаете где ошибка и возвращаетесь в Webstorm.

    Так вот в WebStorm вы уже находитесь в контексте своего нерабочего компонента, так почему бы не запустить дебагер прям компонента, для этого нужно нажать одну кнопку и сразу увидеть где у Вас проблема и прям на месте поправить. Звучит проще по крайней мере
    Ответ написан
    4 комментария
  • Дерганье при скролле в хроме?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    5c091941011a4179133359.png
    Зайдите в настройки хрома и попробуйте изменить значение в этом свитчере на противоположное и посмотрите изменилось поведение на сайте или нет
    Ответ написан
  • Здесь все события которые есть в JavaSctipt или это еще не все?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    По таким вопросам всегда обращайтесь к w3c.
    Вот вам все события

    Да, вы все верно рассуждает про объекты события, у разного типа событий разные свойства. Например, у мышки будут данные про позицию курсора мышки по осям X, Y, а у клавиатурного события таких данных не будет, что вполне себе очевидно.
    Вы также можете создать своё события отнаследовавшись от любого типа события.
    Очень хорошо про события написано тут , а тут про разницу между событиями.

    У вас в тегах указан Event Loop - это если что к событиям не относится, но по ним есть отличное видео
    Ответ написан
    1 комментарий
  • Как переделать класс из ES5 в ES6?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    В методох open и close замени self на this
    Ответ написан
    3 комментария
  • Как при клике на потомка, не выполнять функцию родителя?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Приветствую.

    Изучите как работают события в DOM. Это очень полезно. Trust me. Они погружаются до элемента и потом всплывают. Вот хорошие примеры - learn.javascript.ru/event-bubbling

    Вкратце, когда вы кликаете на DOM-ноду,
    1. событие начинает свой путь от самого корневого элемента, от document,
    2. доходит до кликнутого элемента, запускает обработчики если они есть на этом элементе
    3. начинает всплывать, запуская обработчики на каждом элементе у которого есть обработчики на такой тип события, в данном примере click

    Всплытие можно остановить и это как раз то, что вам нужно

    <div class="parent">
        <div class="son">son</div>
        <div class="son1">son 1</div>
        <div class="son2">son 2</div>
    </div>


    $('.parent').on('click', function() {
        console.log('parent function');
    });
    
    $('.son').on('click', function(event) {
        event.stopPropagation();
        console.log('son function');
    });


    Что в данном случае происходит, событие опускается до $('.son'), запускает обработчик function(event) {...});, а event.stopPropagation(); запрещает событию click всплыть, то есть подняться до элемента $('.parent'), поэтому обработчики $('.parent') не запускаются.

    Ещё бы хотел посоветовать меньше лезть/смотреть в DOM. Говорят это очень ресурсоемкие задачи, так родился Virtual DOM.

    Что в вашем примере не так.

    Вы сначала лезете в DOM за $('.parent'), а потом за $('.son').
    Сохраняя $('.parent'), вы уже можете обратится к $('.son') без лазания в DOM.

    То есть ваш пример выгоднее бы выглядел вот так

    const $parent = $('.parent');
    const $son = $parent.find('.son');
    
    $parent.on('click', function() {
        console.log('parent function');
    });
    
    $son.on('click', function(event) {
        event.stopPropagation();
        console.log('son function');
    });


    Я понимаю, что в данном примере это вообще никак не отразится на производительности, но если ваше приложение чуть сложнее, чем этот пример, то профиты будут.
    Ответ написан
    1 комментарий
  • Существует ли caniuse для JS?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Уже ответили, но я дооформлю, так как лично для меня kagnax tables вообще ничего не значит, в том плане, что я часто пользуюсь этой таблицей, но никогда не смотрел на название =(

    javascript browser supports
    Ответ написан
    Комментировать
  • Как удалить конкретный элемент в массиве?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    let newArray = [{name: 'test', id: 1},{name: 'tttttt', id: 2},{name: 'azaza', id: 3},{name: 'test123', id: 4}].filter(element => element.name !== 'azaza');
    Ответ написан
    Комментировать
  • Получаю undefined при elem.srollY. Где ошибка?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    scrollY — свойство только для чтения интерфейса Window
    Ответ написан
    2 комментария
  • При клике на кнопку "Назад" в браузере, нужно вывести prompt();?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    И слава Богу.
    Ответ написан
    3 комментария
  • Как закрыть модальное окно (Popup) на iOS кликнув по фону?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Попробуйте, не mouseup, а click
    Ответ написан
    Комментировать
  • Можно ли через (if else) изменить класс кнопке и ее название?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Вы же уже всё сделали
    $('.soh-goods').each(function() {
            if ($(this).text() === 'нет на складе') {
                let $button = $(this).next();
                $button.addClass('add-to-soh').text('заказать')
            }
        });
    Ответ написан
    Комментировать
  • JS. Как отправить input по нажатию Enter?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Оберните формой и повесьте слушателя submit

    <form method="post" action="send/to/server">
      <input id="textbox" name="sendtext" class="controls-elements" placeholder="Напишите сообщение и нажмите Enter" type="text"></input>
      <button id="send" onclick="buttonotprav()" class="controls-elements" type="submit">Отправить</button>
    </form>


    $('form').on('submit', event => {
      event.preventDeailt();
      ... // тут можно получить ответ от сервера, если ajax'ом сделать
    })
    Ответ написан
    2 комментария
  • Почему UC browser mobile некоторые функций не работают?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Потому что, не успели ещё реализовать - https://caniuse.com/#search=fetch

    У вендора свои приоритеты развития своего продукта.
    Ответ написан
    Комментировать