Sunday, April 28, 2024
 Popular · Latest · Hot · Upcoming
76
rated 0 times [  82] [ 6]  / answers: 1 / hits: 22473  / 15 Years ago, wed, june 24, 2009, 12:00:00

I have the worlds most simple javascript function:



fnSubmit()
{
window.print();
document.formname.submit();
}


Which is called by:



<button type=button id=submit onclick=fnSubmit()>Submit</button>


All is well and good, the print dialog shows up, however after printing or canceling the print I get the following error:



document.formname.submit is not a function



My form is defined as follows: (obviously I am not using formname in the actual code but you get the idea)



<form name=formname id=formname method=post action=<?=$_SERVER['SCRIPT_NAME']?>>


Obviously I am not trying to do anything special here and I have used similar approaches in the past, what in the world am I missing here?


More From » onclick

 Answers
67

In short: change the id of your submit button to something different than submit. Also, don't set the name to this value either.



Now, some deeper insight. The general case is that document.formname.submit is a method that, when called, will submit the form. However, in your example, document.formname.submit is not a method anymore, but the DOM node representing the button.



This happens because elements of a form are available as attributes of its DOM node, via their name and id attributes. This wording is a bit confusing, so here comes an example:



<form name=example id=example action=/>
<input type=text name=exampleField />
<button type=button name=submit onclick=document.example.submit(); return false;>Submit</button>
</form>


On this example, document.forms.example.exampleField is a DOM node representing the field with name exampleField. You can use JS to access its properties such as its value: document.forms.example.exampleField.value.



However, on this example there is an element of the form called submit, and this is the submit button, which can be accessed with document.forms.example.submit. This overwrites the previous value, which was the function that allows you to submit the form.



EDIT:



If renaming the field isn't good for you, there is another solution. Shortly before writing this, I left the question on the site and got a response in the form of a neat JavaScript hack:



function hack() {
var form = document.createElement(form);
var myForm = document.example;
form.submit.apply(myForm);
}


See How to reliably submit an HTML form with JavaScript? for complete details


[#99255] Friday, June 19, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
wilson

Total Points: 27
Total Questions: 93
Total Answers: 93

Location: Tajikistan
Member since Sun, Aug 29, 2021
3 Years ago
wilson questions
Tue, Aug 9, 22, 00:00, 2 Years ago
Wed, May 11, 22, 00:00, 2 Years ago
Wed, May 20, 20, 00:00, 4 Years ago
Wed, May 13, 20, 00:00, 4 Years ago
;