Как написать два условия для отправки формы?

Здравствуйте.
Есть страница с формой. Форма должна заполняться автоматически из файла, в котором содержатся все данные для этой формы. После заполнения форма должна отправляться. Я сделал отправку по таймауту.

fetch('/orders/'+filename+'.txt').then(response => response.text()).then((data) => {  
    var info, vars = ['familiya', 'imya', 'otchestvo', 'tel', 'email', 'city', 'course_info', 'price', 'pre_order', 'time']; // создаём массив с именами импутов
    info = data.split(';'); // создаём массив со значениями, которые берём из текстового документа   
    for (var i = 0; i<vars.length; i++) {  // перебираем массив и заполняем инпуты
        $('.send_page').find('input[name='+vars[i]+']').attr('value', info[i]);
    }
});
// отправляем форму спустя 1000мс, чтобы инпуты успели заполниться
setTimeout(function(){$("#send_page").submit()},1000);

Но это решение оказалось не самой удачной идеей, т.к. иногда приходят пустые письма, - видимо скрипт не успевает сработать и всё заполнить. Гадать дальше и подбирать задержку больше, мне кажется неправильным. Подумал, что лучше сделать проверку на заполненность полей и только при их заполнении отправлять письмо. НО! Есть нюанс. Я не до конца уверен, что письма приходят пустые именно из-за того, что не успевает сработать скрипт. На это могут быть и другие причины. И в моём случае лучше уж получить пустое письмо, чем не получить никакого.

Отсюда появилась мысль сделать отправку письма при выполнении одного из нескольких условий: либо при заполнении одного из нескольких полей (например tel); либо по прошествии скажем 10 секунд (вне зависимости от заполненности полей). Вот собственно в этом и вопрос, как такое условие составить, я что-то не соображаю уже.
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Если форма отправляется БЕЗ использования AJAX, то вам необходимо сделать следующее:
// Ждем
// готовности
// страницы:

$(function() {
	
	// Запускаем загрузку текста из файла:
	var deferred = $.get('/orders/имя_файла.txt');
	
	// При попытке отправить форму однократно:
	
	$('#send_page').one('submit', function() {
		
		// Отменяем отправку:
		event.preventDefault();
		
		// Ждем готовности текста:
		
		deferred.done(function(text) {
			
			// Вставляем данные с полученного текста в поля:
			
			var info, vars = [ 'familiya', 'imya', 'otchestvo', 'tel', 'email', 'city', 'course_info', 'price', 'pre_order', 'time'];
			
			info = text.split(';'); 
			
			for (var i = 0; i < vars.length; i++) {
				$('.send_page').find('input[name='+vars[i]+']').attr('value', info[i]);
			}
			
			// Инициируем отправку:
			$('#send_page').submit();
			
		});
		
	});
	
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы