Ответы пользователя по тегу JavaScript
  • Как добавить данные в куки без document.cookies?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы можете использовать localStorage, как альтернативу кукам, если данные не требуют высокой безопасности.
    Ответ написан
    Комментировать
  • Как массово применить адреса у картинок из дата атрибута?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Выведите на нужных страницах скрипт:
    <script type="text/javascript">
    	document.addEventListener('DOMContentLoaded', function() {
    		var img = document.querySelectorAll('img[data-href]');
    		for (var n = 0; n < img.length; n++) {
    			var attr = img[n].getAttribute('data-href');
    			img[n].setAttribute('src', attr);
    		}
    	});
    </script>

    Библиотека jQuery не требуется, будет работать и без него. При желании, событие DOMContentLoaded вы можете заменить просто на load, если вдруг вам сначала надо дождаться полной загрузки стилей, скриптов и тех картинок, что не имеют заглушки. Разница между ними в том, что при DOMContentLoaded авто замена атрибутов отработает сразу, как только документ будет загружен и готов к работе, а в случае load будет дополнительная небольшая задержка, пока другие внешние ресурсы не прогрузятся (стили, скрипты и обычные картинки).
    Ответ написан
    Комментировать
  • Возможно ли запретить контекстное меню на смартфонах?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Конечно же можно. Достаточно JavaScript-ом удалить атрибуты href у ссылок, паралельно навесив свои обработчики, которые уже не позволяет на смартфонах контекстное вызывать.
    Ответ написан
    Комментировать
  • Как передать alert в iframe?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Все проще, ем вы думайте. Чтобы выполнить код из окна 1 в условном окне 2, выполните в окне 1 следующее:
    new = window.open('адрес новой страницы');
    new.window.eval('Выполняемый код');
    Ответ написан
    Комментировать
  • Есть ли событие JS чтобы отследить событие ЗАЖАТОЙ движение мыши?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Существуют события зажатой и отжатой кнопки мыши:
    https://vk.cc/aw5rj1

    При этом положение мыши в момент зажатия и отжатия можно определить так:
    https://vk.cc/aw5rlF
    Ответ написан
  • Как отловить нажатие кнопки на input?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если речь именно о кнопке мыши, то попробуйте так:
    <input type="text" onmousedown="alert('Кликнуто поле!');" placeholder="Кликни меня">
    Ответ написан
    Комментировать
  • Распознавание неправильно написанных слов на js, как сделать?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вам нужен Яндекс.Спеллер, у него открытое API, пользуйтесь на здоровье.
    Ответ написан
  • Как отправить форму при нажатии на radio?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Просто используйте атрибут onclick для своих радио кнопок.
    Ответ написан
  • Как отследить изменение инпута?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Так и должно быть, при использовании change. Если вам нужно отследить сам ввод, то использовать надо событие input.

    Старайтесь пользоваться поиском, это все элементарно ищется через Яндекс:
    https://learn.javascript.ru/events-change
    Ответ написан
    Комментировать
  • Как написать регулярное выражение на js?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если надо именно кодом, то;
    test = "hg575gh+hchj567";
    result = test.replace(/[^0-9+]/g, "");
    alert(result);

    Если же надо применительно к полю input у формы, то достаточно использовать атрибут pattern, например так:
    <input type="text" pattern="[0-9+]" required>
    Ответ написан
  • Как безопасно указать строковый параметр при формировании JS на PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Знаете как я сам обычно делаю в таких случаях, чтобы не путаться во всей этой мешанине скобок? Все JavaScript функции сохраняю в отдельные файлы и при необходимости просто вставляю их через file_get_contents("function_name.js") и тогда не приходится парится с экранированием. По аналогии, можно все хранить в базе данных, если нужна скорость.
    Ответ написан
    Комментировать
  • Как решить проблему с focus()?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если вам нужна плавная прокрутка до элемента используйте функцию scrollIntoView(), пример использования ниже:
    document.querySelector('#mobile-search').scrollIntoView({behavior: 'smooth'});

    Вместо #mobile-search можете прописать и использовать абсолютно любой CSS-селектор - например можете вписать селектор input[name="email"] и прокрутка все равно будет работать, так как она осуществляется через JavaScript.

    Код для прокрутки можно привязать к нужной вам кнопке следующим образом:
    <a onclick="document.querySelector('#mobile-search').scrollIntoView({behavior: 'smooth'});" href="#mobile-search">Прокрутить</a>

    Атрибут onclick запускает код внутри себя, при клике на сам элемент. Соответственно, можете вместо ссылок, спокойно использовать любые другие элементы в качестве кнопок, допустим li или button.

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Музыка может просто не запустится, не смотря на ваши установки на автовоспроизведение - браузеры могут блокировать такое поведение. Наилучший вариант, который будет более-менее хорошо работать везде, это загрузить свою музыку на YouTube, а на сайте вывести невидимый фрейм со своим видео, в режиме автовоспроизведения. При запуске видео с YouTubue проблем с автовоспроизведением обычно нет.
    Ответ написан
    Комментировать
  • Как отправить файл через FormData + phpMailer?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте отправить форму на чистом JS, возможно так заработает:
    <script type="text/javascript">
    
      // По готовности страницы, вешаем на форму обрабочтик onsubmit инлайново:
      document.addEventListener('DOMContentLoaded', function() {
        document.querySelector('form#FORM_ID').setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
      });
    
      // Фуцнкция для отправки формы на чистом JavaScript:
      function form_send(form) {
        var url = form.getAttribute('action') + '?time=' + new Date().getTime();
        var xhr = new XMLHttpRequest(); xhr.open('POST', url);
        xhr.onreadystatechange = function() {
          if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
              form.setAttribute('onsubmit', 'event.preventDefault();');
              form.innerHTML = xhr.responseText;
            }
            else {
              alert('При отправке формы произошла ошбика, детали смотрите в консоли.');
              console.log('При отправке формы произошла ошбика, ниже объект с деталями ошибки:');
              console.dir(xhr);
            }
          }
        }
        xhr.send(new FormData(form));
      }
      
    </script>

    Замените FORM_ID на идентификатор вашей формы. Убедитесь, что у вашей формы прописан атрибут action.
    Ответ написан
    3 комментария
  • Обработка формы в php с неизвестными переменными?

    zkrvndm
    @zkrvndm
    Архитектор решений
    В массиве $_POST будут лежать все переданные переменные, вы можете спокойно их перебрать через foreach()
    Ответ написан
    Комментировать
  • Как заблокировать input, если выбрано "нет" в radio button?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Выше вам предложили вариант на JavaScript, но но правде говоря существует еще решение на чистом CSS. Для блокировки вы можете использовать стиль pointer-events: none совместно с CSS селектором ~ и CSS пседо-классом :checked. Разумеется, это сработает только в том случае, если ваши радио-кнопки находятся на том же уровне вложенности, что и блокируемое поле ввода. Если вам нужно, чтобы ваша форма работала даже при отключенном JavaScript, то это хороший вариант.

    HTML-код с примером:
    <input type="radio" name="replenishment-deposit" value="1" checked>
    <input id="net" type="radio" name="replenishment-deposit" value="0">
    <input id="deposit-replenishment-amount" type="number" name="deposit-replenishment-amount" class="calculator-form__input">

    CSS-стили для блокирования по условию:
    #net:checked ~ #deposit-replenishment-amount {
        pointer-events: none;
    }
    Ответ написан
  • Как проверить, что некоторые элемента одного массива есть в другом?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Я не считаю себя знатоком JS, но что-то я не слышал про функцию .contains()
    Если вам нужен просто результат, вы можете банально перебрать свой массив в лоб:
    // Функция для сравнения массивов:
    function arrayCompare(arg1, arg2) {
    	var result = false;
    	for (var n = 0; n < arg1.length; n++) {
    		for (var i = 0; i < arg2.length; i++) {
    			if (arg1[n] === arg2[i]) { result = true; }
    		}
    	}
    	return result;
    }
    
    // Вернёт true, если есть хотя бы одно точное совпадение,
    // если совпадений совсем нет, то вернет false:
    console.log(arrayCompare(array, falsey));

    Я на 100% уверен, что существуют специальные хитрые алгоритмы перебора, которые могу дать результаты с меньшими затратами ресурсов, чем полный перебор, но для небольших массивов вам за глаза хватит.
    Ответ написан
    1 комментарий
  • Как сериализовать html форму?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Простого способа как вы хотите сделать нет, нужно писать парсер, который будет разбирать имена и создавать объекты.
    Ответ написан
    Комментировать
  • Как перезапустить OpenServer удаленно обычным GET-запросом?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Блин, надо было почитать сначала, как работает Basic Auth. Решение оказалось на удивление простым, если я хочу удаленно перезапустить сервер, то инициировать нужный запрос НЕ с родного домена можно вот так:
    open_server_restart_window = window.open('');
    open_server_restart_window.location.href = 'http://login:password@localhost:1515/restart';
    setTimeout(function() { open_server_restart_window.close(); }, 3000);

    По аналогичному принципу можно сгенерировать iframe и использовать внутри него форму для переадресации. Само с собой надо заменить логин, пароль и адрес сервера в ссылке на свои. При таком запросе CORS никак не мешает, а сигнал на перезапуск вполне себе доходит до сервака и прекрасно работает.
    Ответ написан
    Комментировать
  • Как с помощью js узнать на каком устройстве открыт сайт (комп или мобильник)?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Правильный вариант, через User-Agent. Неправильный, но тоже рабочий вариант, через измерение ширины текущего окна.
    Ответ написан
    Комментировать