SmittyBroham wrote:
> Hello,
>
> I have a function that loops through 2 select lists and records the
> values of any hi-lighted options a user would have selected. It then
> sets 2 corresponding "hidden" form elements to the values and submits
> the form data to the server.
>
> I was error free until I added the following line:
>
> document.myform.submit();
I would add your function to the form "onsubmit" event and return
false if your validation fails. Then your submit stays as a
plain submit button.
[...]
> var bhd_list = document.myform.bhd_headings;
> var pib_list = document.myform.pib_headings;
If you pass a reference to the table from the event, you don't
need all those document.myform calls:
<form ... onsubmit="return setValues(this);" ... >
> for ( i=1; i<bhd_list.options.length; i++ ) {
This can be optimised a little as:
var len=bhd_list.options.length;
for (var i=0; i<len; i++) {
Use var to keep i local. Getting the length property once is
more efficient and will make a small difference if you have many
options.
> if ( bhd_list.options[i].selected ) {
> if ( !bhd_values ) {
> bhd_values = bhd_values +
> bhd_list.options[i].value;
> }
> else {
> bhd_values = bhd_values + ':' +
> bhd_list.options[i].value;
This too can be a little more concise:
for ( i=1; i<bhd_list.options.length; i++ ) {
if ( bhd_list.options[i].selected ) {
if ( !bhd_values == '') bhd_values += ':';
bhd_values += bhd_list.options[i].value;
}
}
[...]
> if ( !bhd_values ) {
> alert( "You have to select at least 1 base heading to
> map or else this page doesn't make a lot of sense to have." );
> }
return false here to cancel the submit:
map or else this page doesn't make a lot of sense to have." );
return false
}
> if ( !pib_value ) {
> alert( "You have to select a PIB heading to map to" );
> }
And do the same here
> // Set values of hidden fields
> document.myform.bhd_values.value = bhd_values;
> document.myform.pib_value.value = pib_value;
Use "theForm" reference here to get rid of document...
theForm.bhd_values.value = bhd_values;
theForm.pib_value.value = pib_value;
>
> document.myform.submit(); //this line causes the error
This line is no longer needed. The trivial line to add is:
return true;
But that should not be required (but test in lots of browsers
first).
The full script is below, tested in IE and Firefox.
<script type="text/javascript">
function setValues(theForm) {
var bhd_list = theForm.bhd_headings,
pib_list = theForm.pib_headings,
bhd_values = '',
pib_value = '';
var len = bhd_list.options.length;
for (var i=1; i<len; i++ ) {
if ( bhd_list.options[i].selected ) {
if ( !bhd_values == '') bhd_values += ':';
bhd_values += bhd_list.options[i].value;
}
}
var len = pib_list.options.length
for (var j=1; j<len; j++ ) {
if ( pib_list.options[j].selected ) {
pib_value = pib_list.options[j].value;
break;
}
}
if ( bhd_values == '' ) {
alert("You have to select at least 1 base"
+ " heading to map or else this page"
+ " doesn't make a lot of sense to have.");
return false;
}
if ( pib_value == '' ) {
alert("You have to select a PIB heading"
+ " to map to");
return false;
}
// Set values of hidden fields
theForm.bhd_values.value = bhd_values;
theForm.pib_value.value = pib_value;
}
</script>
--
Rob
|