Ответы пользователя по тегу JavaScript
  • Почему не работает fetch запрос на авторизацию?

    @zkrvndm
    Софт для автоматизации
    document.querySelector('.auth__button').addEventListener('click', auth);
    
    async function auth() {
    
    	event.preventDefault();
    
    	var login = document.querySelector('.auth__input--login').value;
    	var password = document.querySelector('.auth__input--password').value;
    
    	var form = new FormData();
    
    	form.append('username', login);
    	form.append('password', password);
    
    	var url = 'https://авторизация';
    
    	var response = await (await fetch(url, { method: 'POST', body: form })).text();
    
    	console.log('Ответ сервера', response);
    
    }
    Ответ написан
    Комментировать
  • Как исправить Access to fetch at '' from origin 'https://site.com' has been blocked by CORS policy: Request header field access-control-allow?

    @zkrvndm
    Софт для автоматизации
    Целевой сайт должен разрешить вашему сайту отображать данные, только тогда вы сможете легально сделать такой запрос. Нелегально же вы можете использовать прокси, т. е. пропустить запрос через свой сервер - пусть ваш сервер делает запрос и отдаёт результат в браузер.

    Дело в том, что политикой безопасности браузеров запрещено делать запросы с одного сайта на другой, если второй сайт не дал явного разрешения первому. Иначе представьте такую ситуацию, вы заходите на очередной ноунейм сайт и тот за вас делает запросы в личный кабинет сбербанк онлайн и стягивает все ваши деньги. Не хорошо получилось бы, верно?
    Ответ написан
  • Как сбросить только 1 input file?

    @zkrvndm
    Софт для автоматизации
    $('.image-upload').val(''); замени на $(input).val('');
    Ответ написан
    Комментировать
  • Как обновлять данные без перезагрузки страницы?

    @zkrvndm
    Софт для автоматизации
    Пример функции для выборочного обновления контента:
    async function elementUpdate(selector) {
    	try {
    		var html = await (await fetch(location.href)).text();
    		var newdoc = new DOMParser().parseFromString(html, 'text/html');
    		document.querySelector(selector).outerHTML = newdoc.querySelector(selector).outerHTML;
    		console.log('Элемент '+selector+' был успешно обновлен');
    		return true;
    	} catch(err) {
    		console.log('При обновлении элемента '+selector+' произошла ошибка:');
    		console.error(err);
    		return false;
    	}
    }

    Вызывайте функцию elementUpdate() передав внутрь него CSS-селектор того элемента, который вы хотите обновить.

    Например, если хотите обновить div-блок который имеет класс test, то достаточно выполнить:
    elementUpdate('.test');

    Если хотите выполнять обновление каждую секунду, можно использовать цикл:
    // Запускаем функцию autoUpdate по готовности страницы:
    
    document.addEventListener('DOMContentLoaded', autoUpdate);
    
    // Функция для запуска цикла:
    
    async function autoUpdate() {
    	
    	// Бесконечный цикл:
    	
    	while (true) {
    		
    		// Обновляем блок .test:
    		await elementUpdate('.test');
    		
    		// Выжидаем 1000 миллисекунд перед повторением цикла:
    		await new Promise(function(s) { setTimeout(s, 1000); });
    		
    	}
    	
    }
    
    // Функция для обновления контента:
    
    async function elementUpdate(selector) {
    	try {
    		var html = await (await fetch(location.href)).text();
    		var newdoc = new DOMParser().parseFromString(html, 'text/html');
    		document.querySelector(selector).outerHTML = newdoc.querySelector(selector).outerHTML;
    		console.log('Элемент '+selector+' был успешно обновлен.');
    		return true;
    	} catch(err) {
    		console.error('При обновлении элемента '+selector+' произошла ошибка:', err);
    		return false;
    	}
    }
    Ответ написан
    2 комментария
  • Как воспроизвести нажатия на кнопку по очереди?

    @zkrvndm
    Софт для автоматизации
    Попробуй так:
    async function autoClickButton() {
    	
    	document.querySelector('#button').click();
    	
    	await new Promise(function(s) { setTimeout(s, 3000); });
    	
    	document.querySelector('#button2').click();
        
    }

    Где 3000 это задержка между действиями в миллисекундах.
    Ответ написан
    Комментировать
  • Почему не работает if(e.target.classList.contains('.class'))?

    @zkrvndm
    Софт для автоматизации
    Потому что для проверки на соответствие селектору надо применять метод matches:
    document.onclick = (e) =>{
        if(e.target.matches('.class')){
            console.log('d');
        }
    }

    code.mu/ru/javascript/manual/dom/matches
    Ответ написан
    Комментировать
  • Почему не могу обратится к DOM?

    @zkrvndm
    Софт для автоматизации
    Потому что на этом сайте функция console.log переопределена:
    626bacf889758480337921.png
    Ответ написан
    Комментировать
  • Какие есть атрибуты и теги в html, что могут исполнить js?

    @zkrvndm
    Софт для автоматизации
    Если атрибут у элемента начинается с букв on... то там может быть JavaScript.

    Например:
    https://spravka.seodon.ru/html/sobytiya/onload.php

    Но это не обязательно onload, может быть и onhover или любое другое событие.
    Ответ написан
    Комментировать
  • Как получить элемент из объекта jquery?

    @zkrvndm
    Софт для автоматизации
    let modal = event.originalEvent.target;
    Ответ написан
    Комментировать
  • В чём отличие результатов кодировок `encodeURI`, `encodeURIComponent` и `application/x-www-form-urlencoded`?

    @zkrvndm
    Софт для автоматизации
    Лучше не использовать `encodeURI` и `encodeURIComponent`.

    Есть решение, которые будет давать правильную строку для адреса всегда:
    new URLSearchParams({ test1: 'Привет, мир!', test2: 'Hello' }).toString();
    Ответ написан
  • Почему не работает запрос через jQuery?

    @zkrvndm
    Софт для автоматизации
    $.ajax(... замени на jQuery.ajax(...
    Ответ написан
  • Есть ли способ красиво вызвать addeventlistener несколько раз?

    @zkrvndm
    Софт для автоматизации
    Обычно делают так:
    document.body.addEventListener('mouseenter', function(e) {
        console.log(e.target);
    });

    В переменной e.target будет лежать целевой элемент, проверяйте его на соответствие и если он соответствует...

    code.mu/ru/javascript/manual/dom/matches
    Ответ написан
    Комментировать
  • Как грабить js ссылку?

    @zkrvndm
    Софт для автоматизации
    Когда ты качаешь POST-запросом данные из ссылки:
    https://www.kinomania.ru/news?handler=get&page={номер_страницы}

    Надо в том числе и отправлять те же заголовки, что отсылает браузер. Тогда все будет парсится норм.

    62637ee459d58902264778.png
    Ответ написан
  • Обновление содержимого div по кнопке без перезагрузки страницы?

    @zkrvndm
    Софт для автоматизации
    Пример функции для выборочного обновления контента:
    async function elementUpdate(selector) {
    	try {
    		var html = await (await fetch(location.href)).text();
    		var newdoc = new DOMParser().parseFromString(html, 'text/html');
    		document.querySelector(selector).outerHTML = newdoc.querySelector(selector).outerHTML;
    		console.log('Элемент '+selector+' был успешно обновлен');
    		return true;
    	} catch(err) {
    		console.log('При обновлении элемента '+selector+' произошла ошибка:');
    		console.error(err);
    		return false;
    	}
    }

    Вызывайте функцию elementUpdate() передав внутрь него CSS-селектор того элемента, который вы хотите обновить. Например, если хотите обновить блок который имеет класс soderzhimoye, то достаточно выполнить:
    elementUpdate('.soderzhimoye');

    Если хотите привязать это действие к кнопке, то можете сделать так:
    <button onclick="elementUpdate('.soderzhimoye');">Нажми меня, чтобы обновить блок</button>
    Ответ написан
    1 комментарий
  • Как скопировать прослушиватели событий с одно элемента на другой без jquery?

    @zkrvndm
    Софт для автоматизации
    Никак, но можно сделать такой финт ушами... поставить слушатель на новый элемент и транслировать нужные события на старый элемент при помощи dispatchEvent. Минус: каждое событие придется обрабатывать индивидуально.
    Ответ написан
    Комментировать
  • Как записать рекурсию (функц. глубокого копирования) в виде цикла?

    @zkrvndm
    Софт для автоматизации
    Самый простой вариант клонировать обьект это конвертировать его в JSON, а потом обратно. Другое дело, что это не подойдет, если в объекте есть типы данных, которые нельзя представить внутри JSON. Вам обязательно цикл нужен?
    Ответ написан
    2 комментария
  • Есть альтернатива jQuery Form Plugin без jQuery?

    @zkrvndm
    Софт для автоматизации
    Это делается в один абзац кода на чистом JavaScript:
    <script>
    	
    	// Обрабочик для отслеживания готовности страницы:
    	
    	document.addEventListener('DOMContentLoaded', function() {
    		
    		// Ставим на форму обработчик срабатывающий при отправке формы:
    		
    		document.querySelector('form').addEventListener('submit', async function() {
    		
    			var this_form = this; // Получаем ссылку на форму
    			event.preventDefault(); // Отменяем обычную отправку
    			
    			// Блокируем нажатия по форме:
    			
    			this_form.style.opacity = '0.5';
    			this_form.style.pointerEvents = 'none';
    			
    			// Блок кода для отправки формы:
    			
    			try {
    				
    				// Отправляем форму без перезагрузки страницы и выводим ответ сервера на месте формы, как обычный текст:
    				
    				this_form.outerHTML = await (await fetch(this_form.action, { method: 'POST', body: new FormData(this_form) })).text();
    				
    			}
    			
    			// Блок кода для обработки ошибок:
    			
    			catch(err) {
    				
    				// Вывод ошибки, если вдруг отправка неудачная:
    				console.error(err); this_form.outerHTML = err.toString();
    				
    				// Разблокируем форму:
    				
    				this_form.style.opacity = '';
    				this_form.style.pointerEvents = '';
    				
    			}
    			
    		});
    		
    	});
    	
    </script>
    Ответ написан
    Комментировать
  • Как напечатать .docx документ через js?

    @zkrvndm
    Софт для автоматизации
    Файл .docx на самом деле представляет с собой обычный zip-архив. Внутри архива разные xml -файлы, можно спокойно найти нужное место в тексте и поменять на то, что нужно. Как поменять и чем поменять? Для JavaScript существует много архиваторов, лично я сам, когда у меня возникла такая же задача, как у вас, использовал этот:
    https://stuk.github.io/jszip

    P. S. Если вы под напечатать имейте в виду отправку на принтер, то тогда забудьте все, что я написал выше, вам сюда:
    https://yandex.ru/search/?text=%D0%9E%D0%BF%D1%80%...
    Ответ написан
    Комментировать
  • Как передать чистый base64?

    @zkrvndm
    Софт для автоматизации
    Если вы хотите данный base64-файл вставить в поле input, то вы неправильный вопрос задали, потому что удаление приставки вам тут никак не поможет, а вставка выполняется совсем по другому.
    Ответ написан
  • Как сортировать таблицу с ценами в JQuery?

    @zkrvndm
    Софт для автоматизации
    Пример сортировки строк таблицы по цене на jQuery от большего к меньшему:
    $('table#price-table > tbody > tr').sort(function(a, b) {
        var one = Number($(a).children().eq(6).text().replace(/[^0-9]/g, ''));
        var two = Number($(b).children().eq(6).text().replace(/[^0-9]/g, ''));
        return two - one;
    }).each(function(n, tr) {
        $('table#price-table > tbody').append(tr);
    });

    Если цена будет указана с копейками, работать НЕ будет.
    Ответ написан
    2 комментария