@codenerd på twitter Mit seneste tweet:

Javascript Fejl – submit is not a function

Vi kender det alle, man sidder og arbejder på noget og så kommer der en fejl som bare ikke giver mening. Som regel er løsningen ultra simpel, og fejlen kommer selvfølgelig fordi man ikke lige har tænkt sig om.

Her til “morgen” (kl 9:30) sad jeg og legede med et af mine små projekter og skulle lave det mest simple, en formular der kan submittes både via en submit knap og via en javascript function… simpelt! Lavede formularen som altid, og derefter javascript funktionen, men så kom fejlen:

PHP
1
document.forms[0].submit() is not a function

Jeg var ganske forvirret og besluttede at prøve IE som så bare sagde “Objektet understøtter ikke denne egenskab eller metode” – hmm ikke meget hjælp der. Efter at ha testet alt i hoved og bagdel i over en halv time, gik lyset endelig op for mig.

Fejlen opstår når man har kaldt et element i formularen for submit, fx:

PHP
1
<input type="submit" name="submit" value="Send" />

Javascript har et fuldstændigt latterligt forhold til reserverede ord og name collisions, så løsningen er selvfølgelig at kalde ens submit knap noget andet end submit.

Det er bare en af den slags fejl hvor man kan stirre sig blind på koden, i dette tilfælde nåede jeg at teste 120liniers javascript før det gik op for mig

Håber dette lille indlæg kan hjælpe andre til at finde løsningen hurtigere end jeg gjorde.

3 kommentarer

  1. Skrevet af Martin  d. 04/01/2009 kl 10:20

    Faktisk en god ide at undlade name på submit knappen, men hvis man ikke undlader name vil den samme konflikt opstå selvom du bruger getElementById i stedet for document.forms i dette specifikke tilfælde.

    Tak for tippet med ingen navne attribut – troede faktisk den var krævet i xhtml strict

    Svar på kommentaren
  2. Jeg har opdaget en mærkværdighed hvad angår brug af <button type="submit"> og <input type="button" name="submit"> Når man sender et navn og en værdi videre med <input>, så går det hele ok.

    Men i Internet Explorer 7 sker der det, at hvis man bruger button til det samme, så sender den INDHOLDET af <button>, fx stien til et billede, videre, også selv om der er angivet en værdi i button. I Firefox gør den det ok. Problemet med dette er, at hvis man ændrer billedet eller stien eller bare en lille ting, så kan man ikke via php stille noget op med submit-værdien.

    Løsningen kan være at indsætte <input type="hidden"> og så angive navn og værdi her. MEN hvis man har flere knapper, så bliver det sværere at udvælge den korrekte submit-værdi i php-koden efterfølgende.

    Er der mon en løsning på dette?

    Svar på kommentaren
  3. Hej Stefan.

    Ja, det er en lille "bug" om man vil, i IE – selvom de nok ikke mener det 😉 Det er forskelligt hvad de submitter. Der står en note om det på w3schools.com her: http://www.w3schools.com/tags/tag_button.asp

    "Important: If you use the button element in an HTML form, different browsers will submit different values. Internet Explorer will submit the text between the <button> and </button> tags, while other browsers will submit the content of the value attribute. Use the input element to create buttons in an HTML form."

    Svar på kommentaren

Skriv en kommentar

Krævede felter er markeret med *.

*