Задать вопрос
Ответы пользователя по тегу JavaScript
  • Есть ли хорошие конверторы из jquery в js?

    @alexalexes
    В вашем случае лучший конвертер - компетентный программист.
    Ответ написан
    Комментировать
  • Заполнить окно базовой авторизации через JavaScript?

    @alexalexes
    Как вариант, ajax-ом авторизоваться и вызвать обновление страницы.
    var request = new XMLHttpRequest();
        request.open("POST", "test.ru", false);
        request.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + password));  
        request.loaded = function()
        {
          window.location.reload();  // обновление страницы
        };
        request.send();
    Ответ написан
    Комментировать
  • Как выполнить функцию после click?

    @alexalexes
    Вместо click берете более тонкое по срабатыванию событие - mouseup.
    Не забудьте, что у сенсорных устройств есть свой аналог этого события - touchend.
    Ответ написан
    Комментировать
  • Возвращает [object HTMLDivElement].?

    @alexalexes
    let div = document.createElement('div'); // создаем div лишь для того, чтобы положить в него результат функции createContentModal
    div.appendChild(createContentModal()); 
    overlay.innerHTML = div.innerHTML; // и передать его html содержимое куда надо
    Ответ написан
    Комментировать
  • Как добавить блок в input?

    @alexalexes
    Либо вместо input использовать textarea высотой в одну строку, чтобы можно было добавить псевдоэлемент.
    Либо повесить обработчик события который перехватывает любой ввод символов в поле, извлекает число из строки, и дописывает символ. Но тут придется еще бороться с тем, чтобы курсор не съезжал в конец строки.
    Ответ написан
    Комментировать
  • Надо ли дожидаться загрузки документа, если скрипт подключается перед закрывающим тегом body?

    @alexalexes
    Попробуй вычитать геометрию img или его контейнеров до загрузки изображений.
    Ответ написан
    1 комментарий
  • Как изменить масштабирование html страницы?

    @alexalexes
    Взять самый большой блок страницы и масштабировать через transform:
    document.body.style.transform = 'scale(' + ваше_значение + ')';

    Но это никакое отношение к тому свойству масштаба в меню браузера не имеет. Это только мнимая магия CSS преобразований.
    PS: А вообще, как-то не очень дублировать то, что есть в браузере из коробки. Времена, когда каждый второй рисовал циферблат часов времени пользователя на страничке уже давно прошли.
    Ответ написан
  • Событие change. Почему счетчик работает не корректно?

    @alexalexes
    Нужно добавить специальную функцию обертку, чтобы изолировать переменные.
    item.addEventListener('change', (function(item, i) // функция обертка для функции обработчика, содержит переменные, которые нужно изолировать 
    {
    
    return function() { //возврат функции-обработчика для лисенера
         if(item.checked) {
             selectedContactValues.push(parseInt(item.dataset.price));
             countElements[i].value = 1;
         } else {
             selectedContactValues.splice(selectedContactValues.indexOf(item.dataset.price),1);
             countElements[i].value = 0;
         }
            
            resultElement.textContent =  sumArray(selectedContactValues);
        }; // конец функции обработчика событий, переменные которые нужно пропустить через замыкание
    
    })(item, i) // конец функции обертки
    );

    ПС: Возможно, тут нужно клонировать объект item:
    })(JSON.parse(JSON.stringify(item)), i) // конец функции обертки

    Данный способ склонирует только структуру и данные объекта без ссылок на функции и ссылок на DOM.
    ППС: Или брать arr[i] внутри обертки в качестве item, тогда изолировать придется только i:
    item.addEventListener('change', (function(i) // функция обертка для функции обработчика, содержит переменные, которые нужно изолировать 
    {
    
    return function() { //возврат функции-обработчика для лисенера
    let item = arr[i]; // берем item из внешнего массива arr, но по изолированному индексу i     
    if(item.checked) {
             selectedContactValues.push(parseInt(item.dataset.price));
             countElements[i].value = 1;
         } else {
             selectedContactValues.splice(selectedContactValues.indexOf(item.dataset.price),1);
             countElements[i].value = 0;
         }
            
            resultElement.textContent =  sumArray(selectedContactValues);
        }; // конец функции обработчика событий, переменные которые нужно пропустить через замыкание
    
    })(i) // конец функции обертки
    );
    Ответ написан
    2 комментария
  • Как установить правильное смещение dom элемента(jquery, css)?

    @alexalexes
    но откуда то берется плавная прокрутка до нужного места(возможно бутстрап накладывает анимацию)

    Если сторонняя js библиотека не перебирает scrollTop для имитации прокручивания, то возможно в css указано:
    html
    {
      scroll-behavior: smooth;
    }

    Это свойство позволяет обычным способом через css указать, чтобы страница прокручивалась плавно, если меняются прокручивающиеся свойства, без указания их промежуточных значений.

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

    Со smooth-ом моргать не должно, так как js будет (должен) оперировать начальными и конечными значениями прокрутки, а анимацией будет управлять браузер.
    Ответ написан
    Комментировать
  • Как изменить input type="hidden" на "text" в Chrome?

    @alexalexes
    По идее, самым пробивным способом со времен ie6, чтобы что-то заменить в атрибуте тега было использование setAttribute:
    inputs[i].setAttribute('type', 'text');
    Ответ написан
    7 комментариев
  • Как "удалить переменную"?

    @alexalexes
    Удаление плота:
    https://docs.anychart.com/Stock_Charts/Chart_Plots....
    DISABLING AND REMOVING
    If you want to disable plot temporarily use the enabled() method, the series and settings will stay there once you enable plot again.

    To remove plot with all its contents and settings use the dispose() method.


    Удаление серии:
    https://docs.anychart.com/Working_with_Data/Series....

    REMOVING SERIES
    As far as any chart can be adjusted or added at any time, you can also remove any series. If you know the id of the series that should be removed, invoke removeSeries() method and use series id as a parameter for this method. In the situation, when the series has no id it can be removed using removeSeriesAt() method. removeSeriesAt() method uses series index as a parameter and removes the series with the given index.
    Ответ написан
    Комментировать
  • Как сбросить только 1 input file?

    @alexalexes
    Можно использовать css превдокласс nth-child, чтобы выловить нужный элемент с одинаковым классом в пределах одного контейнера.
    $('.image-upload:nth-child(' + номер_интупа_начиная_с_единицы + ')').val('');

    Можно воспользоваться возможностями jquery:
    $('.image-upload')[номер_интупа_начиная_с_нуля].val('');

    А вообще, тут напрашивается сделать шаблон в VueJS, чтобы обеспечить привязку элементов DOM-дерева и бизнес-логики скрипта. Чтобы не высчитывать на каждое событие, а для какого i-ого элемента оно предназначено. Но это уже совсем другая история.
    Ответ написан
    Комментировать
  • В чём отличие результатов кодировок `encodeURI`, `encodeURIComponent` и `application/x-www-form-urlencoded`?

    @alexalexes
    Отличия в охвате специальных символов, которые подвергаются конвертированию.
    Функция encodeURI меньше охватывает символов, а функция encodeURIComponent - больше.
    Но ни та, ни другая не достигает стандарта RFC 3986, чтобы считаться полностью правильно закодированным в вид контента application/x-www-form-urlencoded (смотрите документацию по encodeURI).

    PS: Со стороны php сервера такая же история. Есть urlencode/urldecode - которые неполные по RFC 3986, а есть rawurlencode/rawurldecode - которые полностью удовлетворяют стандарту RFC 3986. При кастомном конструировании http пакетов предпочтительно использовать последние.
    Ответ написан
    1 комментарий
  • Как удалить # из url, чтобы не мешал обновлению страницы?

    @alexalexes
    Добавьте "return false" чтобы предотвратить действие по умолчанию при клике на ссылку - переход по ссылке.
    onclick="window.location.reload(); return false;"
    Ответ написан
  • Как удалить элемент массива в localstorage, по нажатию на крестик, и перезаписать массив?

    @alexalexes
    Нужно использовать обертку+замыкание для обработчика, удаляющего элемент по клику.
    tasks.push(data); // тут вставили очередной элемент
    let task_index = tasks.length - 1; // узнаем его индекс по длине массива, так как он в текущей ситуации последний
    // несколько строк спустя
    b1.addEventListener("click", 
    (function(inner_task_index) // функция-обертка для изоляции контекста, сюда передается значение task_index, я специально выделил его другим именем inner_task_index, чтобы видеть контекст функции-обертки
      {
    // обертка возвращает функцию-обработчик события  для addEventListener
    return function delFromLocalSt() {
        task.removeChild(li);
            let array = JSON.parse(localStorage.getItem('task'));
            array.splice(inner_task_index, 1); // удаляем элемент по известному индексу используя механизм замыкания, используя контекст функции обертки
        localStorage.setItem('task', JSON.stringify(array));
       }
    })(task_index) // вызываем хитрую обертку, чтобы обеспечить изоляцию переменной от контекста функции createEl
    );
    Ответ написан
    1 комментарий
  • Где в Chrome, нужно смотреть JS-события, применённые к элементу во время какого-либо действия с этим элементом?

    @alexalexes
    F12. Раздел "Элементы", выбираете элемент, на котором нужно посмотреть обработчик события. В области интерфейса для просмотра свойств элемента выбираете вкладку "Прослушиватели событий". Выбираете вид события, и выбираете точку входа в JS коде на это событие. Далее, при просмотре кода JS на вкладке "Источники" выбираете, где вам поставить точки останова, чтобы словить остановку выполнения обработки события.
    PS: Такой метод исследования работает только на ванильном или слабо прототипированном коде, написанный без применения библиотек и фреймворков. При использовании библиотек и фреймворков точки привязки событий будут указывать, как правило, на одну единственную функцию в этой библиотеке, отвечающей за высокоуровневый байндинг событий. В этом случае нужно изучать, какие инструменты для отладки есть в самой библиотеке или фреймворке.
    Ответ написан
    Комментировать
  • Как исправить ошибку закрытия таба при попытки ввода информации в input?

    @alexalexes
    На элемент inputa type="number" повесить обработчик события клика с вызовом остановки всплытия события.
    PS: Ссылка для получения полного понимания механизма всплытия/погружения событий.
    Ответ написан
    Комментировать
  • Как изменить высоту срабатывания скрипта?

    @alexalexes
    Прибавьте или убавьте к одному из этих операндов.
    pageYOffset < document.documentElement.clientHeight
    Ответ написан
    Комментировать
  • Как обратиться к id элемента в коллекции?

    @alexalexes
    У вас уже есть коллекция элементов. Зачем вам еще работать с id, если вы их не знаете?
    Просто пробегаетесь по коллекции и что-то там делаете с содержимым каждого элемента, это сразу отразится на DOM (если, конечно, при получении коллекции вы не клонировали элементы).
    let elem_count = elems.length;
    for(let i = 0; i < elem_count; i++)
    {
      let elem = elems[i];
      // что-то сделать с elem
    }
    Ответ написан
  • Как вызывать событие при клике на дочерний элемент?

    @alexalexes
    Если стоит цель обработать клик на конкретном элементе или на его контейнере, то повешайте обработчик на один из этих элементов, а не на весь документ, иначе замучаетесь идентифицировать target.
    let elem = document.querySelector('.elem'); // Берем нужный контейнер
        elem.addEventListener('click' , function(e) // вешаем обработчик только на elem, за счет всплытия события, обработчик будет срабатывать на всех дочерних элементах
        {
          alert('k');
        });

    Если уж хотите оставить обработчик на документе, то идентифицируйте target.
    document.addEventListener('click' , function(e)
        {
          let elem = document.querySelector('.elem');
          if(   e.target == elem // кликнули на сам контейнер elem
             || e.target.tagName == 'SPAN' && e.target.parentNode == elem // или кликнули на какой-то элемент span, непосредственный родитель которого есть наш контейнер elem
            )
          {
            alert('k');
          }
        })
    Ответ написан