2009-06-24 6 views
5

Ich habe die weltweit einfachste JavaScript-Funktion:Formular nicht mit JS Absenden

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

die durch genannt wird:

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

Alles ist gut und gut, der Druckdialog zeigt sich jedoch nach Drucken oder Löschen des Druck ich die folgende Fehlermeldung erhalten:

„document.formname.submit ist keine Funktion“

Meine Form ist wie folgt definiert: (natürlich bin ich nicht Formularnamen in dem eigentlichen Code verwenden, aber Sie bekommen die Idee)

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

Offensichtlich ich versuche nicht, etwas zu tun besonder hier und ich habe Ähnliche Ansätze in dem verwendet Vergangenheit, was in der Welt vermisse ich hier?

+0

Als Arbeit um tat ich folgendes: einfach eine Drucktaste angezeigt werden, die die Druck Methode aufruft, wenn der Benutzer dies erreicht hat, dann zeige ich den Absenden-Button (< input type = "submit" id = "btnSubmit" />) und alles gut. –

Antwort

27

Kurz gesagt: Ändern Sie die ID Ihres Absenden-Schaltfläche auf etwas anderes als "senden". Setzen Sie auch nicht den Namen auf diesen Wert.

Jetzt, einige tiefere Einblicke. Der allgemeine Fall ist, dass document.formname.submit eine Methode ist, die, wenn sie aufgerufen wird, das Formular absendet. In Ihrem Beispiel ist document.formname.submit jedoch keine Methode mehr, sondern der DOM-Knoten, der die Schaltfläche darstellt.

Dies geschieht, weil Elemente eines Formulars über die Attribute name und id als Attribute des DOM-Knotens verfügbar sind. Diese Formulierung ist ein wenig verwirrend, kommt also hier ein Beispiel:

<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> 

Auf diesem Beispiel document.forms.example.exampleField ist ein DOM-Knoten das Feld mit dem Namen „exampleField“ darstellt. Sie können JS verwenden, um auf seine Eigenschaften wie seinen Wert zuzugreifen: document.forms.example.exampleField.value.

In diesem Beispiel gibt es jedoch ein Element der Form "submit", und das ist die Schaltfläche zum Senden, die mit document.forms.example.submit erreicht werden kann. Dies überschreibt den vorherigen Wert, der die Funktion war, mit der Sie das Formular senden können.

EDIT:

Wenn das Feld Umbenennung nicht gut für Sie ist, gibt es eine andere Lösung. Kurz vorher schreibt, verließ ich die Frage auf der Website und bekam eine Antwort in Form eines ordentlichen JavaScript Hack:

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

Siehe How to reliably submit an HTML form with JavaScript? für vollständige Details

5

Try this:

fnSubmit() 
{ 
    window.print(); 
    document.getElementById("formname").submit(); 
} 
+0

Ich weiß absolut das * sollte * funktionieren, aber aus irgendeinem Grund zeigt es nur den Druckdialog und geht nirgendwo hin. –

+0

Dann ist Ihr Problem woanders in Ihrem Code. Höchstwahrscheinlich ein HTML-Tag, das niemals geschlossen wird. –

+0

Leider besteht die Validierung perfekt, also glaube ich nicht, dass es ein Markup-Problem ist? –

6

Da Ihre Form hat sowohl eine id und ein name definiert, Sie einen dieser beiden verwenden:

Mit dem form -Tags id:

document.getElementById('formname').submit(); 

Mit dem form Tag name Attribut:

+0

Funktion fnSubmit() { window.print(); document.forms ['frmTravel']. Submit(); } Hat auch nicht funktioniert, ich bin hier wirklich verwirrt. Sowohl der Formularname als auch die ID sind auf "frmTravel" eingestellt. –

+0

Haben Sie sowohl öffnende als auch schließende Form-Tags? Hast du wohlgeformtes HTML? Haben Sie einen anderen JavaScript-Fehler auf der Seite? Haben Sie ein anderes Element namens frmTravel? Schwer zu debuggen isoliert, ohne die ganze Seite zu sehen. Verwenden Sie die Fehlerkonsole von Firefox, um zu sehen, welche Fehler und Warnungen ausgelöst werden. – artlung

0

Der wahrscheinlichste Täter ist IE verwirrend JavaScript-Variablen, IDs und Namen. Suchen Sie in Ihrer Quelle nach etwas, das den Namen Ihres Formulars teilt.

+0

Das Formular hat beide seinen Namen/ID auf "frmTravel" festgelegt - nichts anderes auf dem Formular hat diesen Namen/ID. –

0
  1. Legen Sie eine Eingabebutton im Formular .
  2. Geben Sie tabindex = "- 1" ein.
  3. Make It unsichtbar mit style = "display: none;".

Like This

<input type="submit" tabindex="-1" style="display:none;" />