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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы можете это легко сделать на чистом JavaScript. Пример кода конкретно для вашей формы:
    <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>

    Разместите этот html-код на странице с вашей формой и не забудьте заменить FORM_ID на ID вашей формы!

    P. S. Кстати, есть еще один вариант, без использования JS - можно просто разместить вашу форму внутри iframe.
    Ответ написан
  • Как скрыть jivosite в мобильной версии?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Разместите на своем сайте (в любом месте) следующий html-код:
    <script type="text/javascript">
    	document.addEventListener('DOMContentLoaded', function() {
    		if (window.innerWidth > 768) {
    			var jivo = 'Здесь разместите код от виджета JivoSite';
    			document.body.insertAdjacentHTML('beforeEnd', jivo);
    		}
    	});
    </script>

    Внутри одинарных скобок разместите код от виджета JivoSite, НО без переносов строк внутри!
    Удалите предварительно все переносы строк из кода виджета!!! Иначе будет ошибка и не заработает.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при обновлении страницы, iframe не обновлялся?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для того, чтобы фрейм не обновлялся при обновлении сайта, надо сам сайт тоже выводить во фрейме. Грубо говоря, сайт свой показывайте во фрейме на 100% высоты и 100% ширины окна, но поверх него накладывайте второй ваш фрейм, который не хотите обновлять. В общем, нужно делать 2 фрейма.
    Ответ написан
    Комментировать
  • Есть ли готовые скрипты для реализации такого процесса?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для этих целей существуют CRM системы, конечно нужно будет сначала сделать интеграцию, но потом сможете удобно отслеживать статусы всех заявок. Если же не хотите тратится на CRM, то есть половинчатое решение. Например, вы получайте все заявки на GMail (допустим), вы начинаете писать ответ, но НЕ отправляйте его. Следующий оператор, когда откроет это письмо, увидит, что есть не отправленный ответ (ваши комментарии) и при необходимости сможет дополнить их - Google автоматически сохраняет не оправленные письма.
    Ответ написан
    Комментировать
  • Можно ли повесить событие на комментарии html?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Конечно можно, вариантов реализации много, но самый просто выглядит так:
    var p_all = document.querySelectorAll('p'); // Ищем все абзацы
    
    // Обходим найденные абзацы в цикле:
    for (var n = 0; n < p_all.length; n++) {
        // При помощи автозамены заворачиваем слово яблоко в спаны с атрибутом onmouseover:
        p_all.innerHTML = p_all.innerHTML.replace(/ЯБЛОКО/g, '<span onmouseover="youScript(this);">ЯБЛОКО</span>');
    }

    Всякий раз, при наведении мышки на слово ЯБЛОКО будет срабатывать скрипт указанный в onmouseover, при этом в сам скрипт будут передаваться ссылка на элемент (this).
    Ответ написан
    Комментировать
  • Как отловить валидацию input email html?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Так конечно не делают, но вы можете использовать псевдо-классы для проверки. Например, неправильно заполненный input имеет псекдо-класс :invalid соответственно:
    // Выдаст 1, если заполнено неправильно:
    document.querySelectorAll('input[type="email"]:invalid').length;

    В противоположенность ему, есть еще псевдо-класс :valid
    Ответ написан
  • Как вставить ссылки в текст?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте for() для перебора свойств объекта и replace() для замены слов на те же слова, но уже со ссылкой.
    Ответ написан
    Комментировать
  • Можно ли через js-файл на рабочем столе Windows загрузить файл?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Нашел способ, можно через .bat файл открывать ссылку на загрузку документа в браузере по умолчанию и при этом фоном отслеживать в цикле папку Загрузки, как только в ней появляется ожидаемый нами файл, открываем Загрузки в проводнике и выделяем сам файл.

    Пример кода для будущих поколений:
    @echo off
    chcp 65001
    if not exist "%Userprofile%\Downloads\word.docx" start "" "https://site.ru/word.docx"
    cmd/c for /l %%i in () do @(if exist "%Userprofile%\Downloads\word.docx" explorer /select, "%Userprofile%\Downloads\word.docx"^& exit/b)^&^>nul timeout /t 1 /nobreak
    exit

    Само с собой, ссылку и название файла нужно заменить на свои. Файл .bat должен иметь кодировку UTF-8!
    Ответ написан
  • Как запретить Chrome замораживать фоновые вкладки?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Ура!) Я нашел решение своей проблемы. Нужно просто в background.js своего расширения поместить обработчики:
    chrome.tabs.onCreated.addListener(function(tab) {
        chrome.tabs.update(tab.id, {
            autoDiscardable: false
        });
    });
    
    chrome.tabs.onReplaced.addListener(function(tabId) {
        chrome.tabs.update(tabId, {
            autoDiscardable: false
        });
    });
    
    chrome.runtime.onInstalled.addListener(function(details) {
        chrome.tabs.query({}, function(tabs) {
            tabs.forEach(function(tab) {
                chrome.tabs.update(tab.id, {
                    autoDiscardable: false
                });
            });
        });
    });
    Ответ написан
    Комментировать
  • Как на JS сделать колонки одинаковой высоты?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Автор, блин. Просто используйте таблицы! Задача же элементарно решается, через объединение ячеек в средней колонке.
    Ответ написан
  • Как сымитировать ввод с клавиатуры данных в поле ввода?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте .dispathEvent() для вызова события ввода на нужных вам полях.
    Ответ написан
    Комментировать
  • Как через javascript добавить родителя к блоку?

    zkrvndm
    @zkrvndm
    Архитектор решений
    На чистом JavaScript можно сделать так:
    var element = document.querySelector('.child');
    element.outerHTML = '<div class="parent">'+element.outerHTML+'</div>';

    Свойство outerHTML показывает весь HTML код элемента и при желании его можно переписать.
    Ответ написан
    Комментировать
  • Как можно другим способом найти сумму объекта?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте использовать Object.values()
    Ответ написан
    Комментировать
  • Как отправить данные на сервер в формате json, с связанными списками?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Просто напишите свою функцию для сериализации (для сбора данных с формы). Не понимаю, в чём проблема.
    Ответ написан
  • Как запретить ввод HTML по нажатию на ENTER?

    zkrvndm
    @zkrvndm
    Архитектор решений
    На мой взгляд, это плохая идея, использовать блоки для ввода текста. Лучше используйте textarea + autosize.
    Это такой плагин, который автоматически меняет высоту текстового поля в зависимости от количества строк:
    https://www.jacklmoore.com/autosize
    Ответ написан
  • Как сделать выполнение JS только при наличии открытого сайта?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если второй сайт открыл первый, то вы можете отслеживать его состояние из первого сайта.

    site = window.open('https://google.com');

    Смотрите далее свойство site.
    Ответ написан
    Комментировать
  • Из-за чего при XMLHttpRequest запросе свойство responseText может быть пустым?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Проблема решена. Оказалось, что если смотреть конкретно само свойство, а не весь объект целиком, то ответ сервера прекрасно отображается. Всем спасибо за внимание)

    5eaef5f48f319959588371.png
    Ответ написан
    Комментировать
  • Как отправить HTML-форму без нажатия на клавишу подтверждения?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Напишите функцию, которая проверяет поле с номером телефона и если оно заполнено правильно, автоматически отсылайте форму. Короче, вам нужен валидатор.
    Ответ написан
    Комментировать
  • Как изменить таймаут у функции jQuery.ajax()?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Нашел решение, за таймаут запроса отвечает параметр timeout внутри JSON, который передаем в функцию. Подробнее ниже:
    Время ожидания ответа от сервера. Задается в в миллисекундах. Если это время будет превышено, запрос будет завершен с ошибкой и произойдет событие error (см. описание выше), которое будет иметь статус "timeout".
    Время отсчитывается с момента вызова функции $.ajax. Может случиться так, что в этот момент будет запущено несколько других запросов и браузер отложит выполнение текущего запроса. В этом случае timeout может завершиться, хотя фактически, запрос даже еще не был запущен.
    Ответ написан
  • Что это значит?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Ну, очевидно, что если посетитель выбрал завтрашнюю или послезавтрашнюю дату, то показываем перед датой соответствующий текст. Во всех остальных случаях перед датой просто пишем день недели.
    Ответ написан
    Комментировать