how to change the value of a hidden form value on submit

M

Matt Herson

I have been trying to find a way to use JavaScript to change the value of a
hidden field on submit. I am already invoking a JavaScript to handle the
validation on submit.

The reason I need to change this field is some of the forms have two buttons
on them, each needs to process the form differently. If I can change the
value of the hidden field dynamically it will solve my issue as I can run
each against a diffent cgi.

Currently my submit button looks like:

<a href="javascript:sendOrnot()"><img
src="../../../images/request_info_submit_submitImg.gif" border="0"></a>



I need one button to pass the value of:

<input type=hidden name=form-name value="request_for_info">

And the other as:

<input type=hidden name=form-name value="request_for_info_ver2">

I have tried using something like:

<form>

<input type="hidden" name="form-name" value="">

<input type="image" src="../../../images/request_info_submit_submitImg.gif"
onclick="this.form.form-name.value='request_for_info';this.form.sendOrnot()"
<input type="image"
src="../../../images/request_info_submit_ver2_submitImg.gif"onclick="this.fo
rm.form-name.value='request_for_info_ver2';this.form.this.form.sendOrnot()">

</form>

Doing so, gave me an invalid form error.

Any ideas on how I could accomplish this. I have done a lot of looking on
the web and have tried many things but have not had any luck. Any help would
be extremly appreciated. In addition to passing the changed value for
form-name, I also still need to invoke the JavaScript used for my
validation.

Thanks,

Matt
 
W

Wim Poorten

Matt said:
<form>

<input type="hidden" name="form-name" value="">

<input type="image"
src="../../../images/request_info_submit_submitImg.gif"
onclick="this.form.form-name.value='request_for_info';this.form.sendOrnot()"

<input type="image"
src="../../../images/request_info_submit_ver2_submitImg.gif"onclick="this.fo
rm.form-name.value='request_for_info_ver2';this.form.this.form.sendOrnot()">

</form>

Doing so, gave me an invalid form error.

The dash is not allowed in the name of a control.
Change "form-name" into "form_name".

I guess the "this.form.this.form.sendOrnot()" for the second image is a
typo.
 
R

Richard Cornford

The dash is not allowed in the name of a control.
Change "form-name" into "form_name".
<snip>

The dash is allowed in the name of a control.

From the HTML specification:-
<quote>
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
followed by any number of letters, digits ([0-9]), hyphens ("-"),
underscores ("_"), colons (":"), and periods (".").
</quote>

The dash is not allowed in a JavaScript identifier and only valid
JavaScript identifiers are allowed within dot notation property
accessors. Bracket notation property accessors should be a viable
alternative in this case:-

<URL: http://jibbering.com/faq/#FAQ4_25 >
-and-
<URL: http://jibbering.com/faq/#FAQ4_39 >

Richard.
 
M

Matt Herson

ok, assuming the dash is accepted, any ideas on how to accomplish the change
to the hidden field?


Richard Cornford said:
The dash is not allowed in the name of a control.
Change "form-name" into "form_name".
<snip>

The dash is allowed in the name of a control.

From the HTML specification:-
<quote>
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
followed by any number of letters, digits ([0-9]), hyphens ("-"),
underscores ("_"), colons (":"), and periods (".").
</quote>

The dash is not allowed in a JavaScript identifier and only valid
JavaScript identifiers are allowed within dot notation property
accessors. Bracket notation property accessors should be a viable
alternative in this case:-

<URL: http://jibbering.com/faq/#FAQ4_25 >
-and-
<URL: http://jibbering.com/faq/#FAQ4_39 >

Richard.
 
R

Richard Cornford

Matt Herson said:
ok, assuming the dash is accepted, any ideas on how to accomplish the change
to the hidden field?
<snip>

The whole task is unnecessary as <input type="image"> elements provide
name/value pairs in the request if they are given name attributes. Two
buttons with unique names would allow the button that was actually
clicked to be determined on the server by testing for the presence of a
value of each name (the name/value pairs will not be present for the
button that was not clicked).

For an <input type="image"> element the name value pairs are not the
same as with a normal submit button as they include the XY co-ordinates
of the mouse click. Given an element:-

<input type="image" name="submit1" src="[...].gif">

- the query string sent with a get request would be -
?submit1.x=0&submit1.y=0 - (similar information can be extracted from
post requests). Branching the code on the server based on this
information is trivial.

Otherwise, if you insist on making this dependent on JavaScript, you
will need to switch to setting the value of the hidden filed using a
bracket notation property accessor to avoid the invalid (for a
JavaScript identifier) characters in the field name. You will also nee
to cancel the default action of the <input type="submit"> buttons (which
is to submit the form), or cancel the submission of the form from the
onsubmit handler.

Richard.
 
M

Matt Herson

The validation script that has been developed will not support input
type=image tags for the submit button. It needs to be done within an <a>
tag. So, I need to use the link like:
<a href="javascript:sendOrnot()"><img
src="../../../images/request_info_submit_submitImg.gif" border="0"></a>
but pass the hidden values at the same time

Any ideas??



Richard Cornford said:
Matt Herson said:
ok, assuming the dash is accepted, any ideas on how to accomplish the change
to the hidden field?
<snip>

The whole task is unnecessary as <input type="image"> elements provide
name/value pairs in the request if they are given name attributes. Two
buttons with unique names would allow the button that was actually
clicked to be determined on the server by testing for the presence of a
value of each name (the name/value pairs will not be present for the
button that was not clicked).

For an <input type="image"> element the name value pairs are not the
same as with a normal submit button as they include the XY co-ordinates
of the mouse click. Given an element:-

<input type="image" name="submit1" src="[...].gif">

- the query string sent with a get request would be -
?submit1.x=0&submit1.y=0 - (similar information can be extracted from
post requests). Branching the code on the server based on this
information is trivial.

Otherwise, if you insist on making this dependent on JavaScript, you
will need to switch to setting the value of the hidden filed using a
bracket notation property accessor to avoid the invalid (for a
JavaScript identifier) characters in the field name. You will also nee
to cancel the default action of the <input type="submit"> buttons (which
is to submit the form), or cancel the submission of the form from the
onsubmit handler.

Richard.
 
L

Lasse Reichstein Nielsen

Please don't top post.
The validation script that has been developed will not support input
type=image tags for the submit button.

Ok, then how about:

It needs to be done within an <a> tag. So, I need to use the link
like:

Who says that it *needs* that? Maybe there is another way?
<a href="javascript:sendOrnot()"><img
src="../../../images/request_info_submit_submitImg.gif" border="0"></a>

At lease use the onclick attribute instead of a javascript: pseudo
protocol.
but pass the hidden values at the same time

Make a hidden field and populate them with the values you want, as
Richard Cornford said.

/L
 
S

Stephen

Richard said:
ok, assuming the dash is accepted, any ideas on how to accomplish the
change

to the hidden field?

<snip>

The whole task is unnecessary as <input type="image"> elements provide
name/value pairs in the request if they are given name attributes. Two
buttons with unique names would allow the button that was actually
clicked to be determined on the server by testing for the presence of a
value of each name (the name/value pairs will not be present for the
button that was not clicked).

[...snip subsequent...]

Most browsers I tested (3 gecko-based + ie6) would do this with buttons
having the same name but different values, e.g.,

name="form-name"
value="request_for_info"

name="form-name"
value="request_for_info_ver2"

This *should* work per W3 specs as I understand them. However, I tried
this with opera 7.11, which seemed to omit the name=value pair, even
though it transmits the image click coordinates just fine--as, for
example, "form-name.x=8&form-name.y=9". Unless I'm just looney and
didn't see it correctly. This seems to me to be incorrect following of
the specs. It's certainly different from the way "everybody else" does it.

So I guess you probably would be better off with two different names for
the buttons:

name="request_for_info"
name="request_for_info_ver2"

At least this way, "everybody" transmits the same thing on submit.

I definitely agree this is the way to go ...

Regards,
Stephen
 
M

Matt Herson

Stephen said:
Richard said:
ok, assuming the dash is accepted, any ideas on how to accomplish the
change

to the hidden field?


<snip>

The whole task is unnecessary as <input type="image"> elements provide
name/value pairs in the request if they are given name attributes. Two
buttons with unique names would allow the button that was actually
clicked to be determined on the server by testing for the presence of a
value of each name (the name/value pairs will not be present for the
button that was not clicked).

[...snip subsequent...]

Most browsers I tested (3 gecko-based + ie6) would do this with buttons
having the same name but different values, e.g.,

name="form-name"
value="request_for_info"

name="form-name"
value="request_for_info_ver2"

This *should* work per W3 specs as I understand them. However, I tried
this with opera 7.11, which seemed to omit the name=value pair, even
though it transmits the image click coordinates just fine--as, for
example, "form-name.x=8&form-name.y=9". Unless I'm just looney and
didn't see it correctly. This seems to me to be incorrect following of
the specs. It's certainly different from the way "everybody else" does it.

So I guess you probably would be better off with two different names for
the buttons:

name="request_for_info"
name="request_for_info_ver2"

At least this way, "everybody" transmits the same thing on submit.

I definitely agree this is the way to go ...

Regards,
Stephen
THANKS TO YOU ALL!
Now, as it turns out the validator I was using won't work anyway. So I no
longer need to submit using the <a href x> tag. Thanks again. Now I will
be posting a validation issue.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top