2012-04-08 8 views
0

Ich habe ein einfaches HTML/JavaScript-Kontaktformular, dass HostGator zur Verfügung gestellt. Es funktioniert ziemlich gut ... wenn der Benutzer keinen Namen oder eine ungültige E-Mail-Adresse übermittelt, erscheint eine JavaScript-Warnung, die das sagt. Diese Warnungen bleiben auf dem Bildschirm, bis der Benutzer auf OK klickt. Wenn der Benutzer das Kontaktformular jedoch korrekt übermittelt, dauert der letzte Erfolgsalarm nur etwa eine halbe Sekunde. Ich versuche herauszufinden, wie die letzte E-Mail-Erfolgsalarmmeldung für eine bestimmte Zeit ausgeführt werden kann, entweder bis der Benutzer auf die OK-Schaltfläche klickt und dann an die angegebene Seite weitergeleitet wird. Hier ist der Link zu den HostGator Informationen auf Kontaktformular w/JavaScript http://www.hostgator.com/formmail.shtml und hier ist der Code, den ich ändern möchte, um Post-Submit-JavaScript-Nachricht zu erhalten, um zu bleiben, anstatt zu verschwinden, bevor der Benutzer sogar eine Chance hat, es zu lesen . Javascript Alarm Fenster - wie man len

<!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 (/^\[email protected][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="[email protected]"> 
<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> 
+1

versuchen setzen alert() vor submit() – anuragsn7

Antwort

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

Dies sollte die Warnung tun(), 4 Sekunden warten (oder was auch immer Sie in dem zweiten Paramter angeben) und dann reichen Sie die().

+0

Danke für die schnelle Antwort. Das funktioniert. – max

0

Das Problem scheint, dass Pop-up angezeigt wird, während document.hgmailer.submit(); noch im Gange ist. Aufgrund der Verzögerung beim Senden sehen Sie ein Popupfenster für einen Bruchteil einer Sekunde, bevor submit() abgeschlossen ist und Sie zur Zielseite weitergeleitet werden.

Eine Möglichkeit ist alert(....) vor ....submit() zu setzen, oder Sie können jQuery asynchron Sie veröffentlichen Daten wie:



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

EDIT:

Oder Sie können diese ganze Popup-Geschäft zu vermeiden und zu tun dies:



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

das heißt, können Sie im Grunde gesetzt die value von Senden-Taste, um "Please wait..." von "Email Me!"

auf diese Weise, werden die Nutzer wissen, dass ihre E-Mail noch in Bearbeitung ist, und sie werden nicht auf der Seite vor der Fertigstellung ändern.

+0

Dank. Diese Antwort war ein bisschen lehrreicher als die anderen, aber ging meine Frage (meine subjektive Meinung) nicht auf die effizienteste einfache Weise an. Schätze, dass du dir die Zeit nimmst, um zu antworten. – max

0

Sie können das Senden des Formulars problemlos stoppen, bis der Benutzer auf die Schaltfläche OK des letzten Alerts klickt. Verwendung

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

stattdessen

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

Danke! Es ist ein weiterer guter Weg, um das zu erreichen, wonach ich suchte. – max