0

我有一个 HostGator 提供的基本 HTML/JavaScript 联系表。它工作得很好……如果用户没有提交姓名或无效的电子邮件地址,则会弹出一个 JavaScript 警报,说明是这样。这些警报会一直显示在屏幕上,直到用户单击“确定”。但是,如果用户正确提交了联系表单,最终的成功警报只会持续 1/2 秒左右。我试图弄清楚如何使最终的电子邮件成功警报持续指定的时间,或者直到用户单击“确定”按钮,此时他们被重定向到指定的页面。这是带有 JavaScript 的联系表上 HostGator 信息的链接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>
4

3 回答 3

0

document.hgmailer.submit();这里的问题似乎仍在进行中时显示弹出窗口。由于提交延迟,您会在submit()完成前几分之一秒看到弹出窗口,然后您将被重定向到目标页面。

一种方法是放在alert(....)before ....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(); 

也就是基本上可以将valueSubmit按钮的设置为"Please wait..."from"Email Me!"

这样,用户就会知道他们的电子邮件仍在处理中,并且在完成之前他们不会更改页面。

于 2012-04-08T09:45:28.053 回答
0
   else {
     alert('Thank you!\nYour email is sent.');
     setTimeout("document.hgmailer.submit()", 4*1000);
   }

这应该执行 alert(),等待 4 秒(或您在第二个参数中指定的任何内容),然后执行 submit()。

于 2012-04-08T09:47:24.963 回答
0

您可以轻松地停止表单提交,直到用户单击最后一个警报的“确定”按钮。采用

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.');
于 2012-04-08T09:53:09.777 回答