arnoh
asked on
Form problem, load subsequent page w/o cgi on submit
So, I've got this form that I want to post via email, but I want to load a "success" page after the form has been submitted. The script & form below _should_ work, but the submit() function doesn't seem to function as specified. Interestingly enough, if I add a regular submit button and
add the line "document.surveyForm.Submi t.click()" it works fine...but then I've got two submit buttons, err...kinda stupid. I need a solution that either enables me to load a success page after submission using a regular submit button, OR a method for submitting a form using a method included in an onClick handler. Help?
<CODE>
<FORM ACTION="mailto:arno@sirius .com?subje ct=Test Survey" METHOD="POST"
ENCTYPE="text/plain" NAME="surveyForm">
<SCRIPT LANGUAGE="JavaScript">
<!--hide script
function sendIt(targetHREF)
{ document.surveyForm.submit ()
self.location.href=targetH REF
}
// -->
</SCRIPT>
What is your name?<BR>
<INPUT NAME="name" TYPE="Text" VALUE="" SIZE="32" MAXLENGTH="32"> <P>
<INPUT NAME="Submit Form" TYPE="Button" VALUE="Submit Form"
onClick="sendIt('success.h tml')">
</FORM>
</CODE>
add the line "document.surveyForm.Submi
<CODE>
<FORM ACTION="mailto:arno@sirius
ENCTYPE="text/plain" NAME="surveyForm">
<SCRIPT LANGUAGE="JavaScript">
<!--hide script
function sendIt(targetHREF)
{ document.surveyForm.submit
self.location.href=targetH
}
// -->
</SCRIPT>
What is your name?<BR>
<INPUT NAME="name" TYPE="Text" VALUE="" SIZE="32" MAXLENGTH="32"> <P>
<INPUT NAME="Submit Form" TYPE="Button" VALUE="Submit Form"
onClick="sendIt('success.h
</FORM>
</CODE>
arnoh is right. submit() works, but not if the form ACTION is mailto: !!
This is what I use to get a success page to show up. Enter it just before the </FORM> tag.
<INPUT TYPE="hidden" NAME="next-url" VALUE="next_page.html">
<INPUT TYPE="hidden" NAME="next-url" VALUE="next_page.html">
ASKER
I'm not sure I understand how a hidden input will load a page just by virtue of its presence?! Nonetheless I tried the solution suggested above...with no result. Is there an additional script that needs to be added to make the hidden input work?
I did some digging and evidentally the Name="next_url" is a variable of some type for a CGI script. I didn't realize this until you said that it didn't work. Sorry.
The issue that the other comments made about the security issues for submitting an action of mailto, I believe are false. According to Netscape's JS Guide you can use a mailto as an action. However, the user will be notified that information is about to be sent via email. They then have the choice of allowing or dis-allowing the email from being sent.
The problem of going to another page once the email has been sent I don't believe can be done without a CGI script for a single button. The security just won't let you.
The issue that the other comments made about the security issues for submitting an action of mailto, I believe are false. According to Netscape's JS Guide you can use a mailto as an action. However, the user will be notified that information is about to be sent via email. They then have the choice of allowing or dis-allowing the email from being sent.
The problem of going to another page once the email has been sent I don't believe can be done without a CGI script for a single button. The security just won't let you.
First, to echo what's been said - submit() won't work if the ACTION is mailto: - too many people were compiling SPAM-lists of everyone who visited the page (by submitting invisible mailto: forms) - but there is a way to make this work ...
Instead of <INPUT TYPE="button">, use <INPUT TYPE="submit"> - which is designed to submit the form withour recourse to JavaScript. That will make sure the e-mail gets sent.
In that tag (the <INPUT TYPE="submit">) include an onClick event handler ..
onClick="this.location='ne wpage.html ';"
This is the important bit: OMIT the HREF - document.location.href is a read-only parameter that returns the URL of the present document as a string that can be parsed for evaluation. When you assign document.location.href a value, it takes on that new value (strangely enough - should return an error, theoretically) as if it were any other string variable,- it does not serve to redirect the user to another page. document.location = '[url]'; will do the trick.
Instead of <INPUT TYPE="button">, use <INPUT TYPE="submit"> - which is designed to submit the form withour recourse to JavaScript. That will make sure the e-mail gets sent.
In that tag (the <INPUT TYPE="submit">) include an onClick event handler ..
onClick="this.location='ne
This is the important bit: OMIT the HREF - document.location.href is a read-only parameter that returns the URL of the present document as a string that can be parsed for evaluation. When you assign document.location.href a value, it takes on that new value (strangely enough - should return an error, theoretically) as if it were any other string variable,- it does not serve to redirect the user to another page. document.location = '[url]'; will do the trick.
ASKER
Didn't fix it. The problem here seems to be that the onClick handler doesn't work on a submit type input...ergh. I've never had the problem with setting location.href, works fine for me in other code. Here's the really weird part. If I put an alert statement in the onClick handler, it executes the alert. It just won't execute a page load.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Though it's still a kludge of sorts...I think it's the best JS is going to offer. Thanks to all for the help.
ASKER