Окно предупреждения Javascript - как установить len

У меня есть базовая контактная форма HTML/JavaScript, предоставленная HostGator. Это работает довольно хорошо... если пользователь не отправляет имя или неверный адрес электронной почты, всплывает предупреждение JavaScript, которое говорит об этом. Эти предупреждения остаются на экране до тех пор, пока пользователь не нажмет OK. Тем не менее, если пользователь отправляет контактную форму правильно, окончательное предупреждение об успехе длится около 1/2 секунды или около того. Я пытаюсь выяснить, как сделать последнее уведомление об успешном отправлении электронной почты последним в течение определенного времени, либо до тех пор, пока пользователь не нажмет кнопку ОК, после чего они будут перенаправлены на указанную страницу. Вот ссылка на информацию HostGator в контактной форме с JavaScript http://www.hostgator.com/formmail.shtml а вот код, который я пытаюсь изменить, чтобы вместо этого было размещено сообщение JavaScript после отправки, чтобы остаться там. исчезнуть, прежде чем пользователь даже сможет прочитать его.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>FormMail Demo</title>
<script type="text/javascript">
function hgsubmit()
{
if (/\S+/.test(document.hgmailer.name.value) == false) alert ("Please provide your name.");
else if (/^\S+@[a-z0-9_.-]+\.[a-z]{2,6}$/i.test(document.hgmailer.email.value) == false) alert ("A valid email address is required.");
 else if (/\S+/.test(document.hgmailer.comment.value) == false) alert ("Your email content is needed.");
  else {
       document.hgmailer.submit();
       alert ('Thank you!\nYour email is sent.');
       }
}
</script>
</head>
<body>
<form action="http://www.mydomain.com/cgi-sys/formmail.pl" method="post" name="hgmailer">
<input type="hidden" name="recipient" value="myemail@mydomain.com">
<input type="hidden" name="subject" value="FormMail E-Mail">
Whatever you want to say here<br><br>
Visitor Name: <input type="text" name="name" size="30" value=""><br>
Visitor E-Mail: <input type="text" name="email" size="30" value=""><br>
E-Mail Content: <textarea name="comment" cols="50" rows="5"></textarea><br><br>
<input type="button" value="E-Mail Me!" onclick="hgsubmit();">
<input type="hidden" name="redirect" value="http://www.mydomain.com/redirect-path">
</form>
</body>
</html>

3 ответа

Решение
   else {
     alert('Thank you!\nYour email is sent.');
     setTimeout("document.hgmailer.submit()", 4*1000);
   }

Это должно сделать alert(), подождать 4 секунды (или все, что вы указали во втором параметре), а затем выполнить submit().

Вы можете легко остановить отправку формы, пока пользователь не нажмет кнопку "ОК" последнего предупреждения. использование

alert ('Thank you!\nYour email is sent.');
//waits here  until user click 'ok', then submit!
document.hgmailer.submit();

вместо,

document.hgmailer.submit();
alert ('Thank you!\nYour email is sent.');

Проблема здесь кажется, что всплывающее окно отображается в то время как document.hgmailer.submit(); все еще в процессе. Из-за задержки отправки вы видите всплывающее окно на долю секунды раньше submit() завершается, и вы будете перенаправлены на целевую страницу.

Одним из способов является положить alert(....) до ....submit() или вы можете использовать jQuery для асинхронной отправки данных, например:



    $.post("target_Page_Address", 
            { var1: value1, var2: value2 // and so on }, 
            function(response){  // Do something based on response }
          );

РЕДАКТИРОВАТЬ:

Или вы можете избежать всего этого всплывающего бизнеса и сделать это:



    document.hgmailer.submit_button_name.value= 'Please wait...';
    document.hgmailer.submit(); 

То есть вы можете в основном установить value кнопки "Отправить" "Please wait..." от "Email Me!"

Таким образом, пользователи будут знать, что их электронная почта все еще обрабатывается, и они не изменят страницу до завершения.

Другие вопросы по тегам