Frage

Ich habe die weltweit einfachste JavaScript-Funktion:

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

, die aufgerufen wird durch:

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

Alles schön und gut ist, zeigt der Druckdialog auf, jedoch nach dem 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']?>">

Natürlich versuche ich, nicht Besonderes hier etwas zu tun, und ich habe Ähnliche Ansätze in der Vergangenheit verwendet, was in der Welt bin ich hier fehle?

War es hilfreich?

Lösung

Kurz gesagt: ändern Sie die id Ihren Submit-Button auf etwas anderes als "Eintragen". Auch nicht setzen Sie die Namen auf diesen Wert auch nicht.

Nun, einige tiefere Einblicke. Der allgemeine Fall ist, dass document.formname.submit eine Methode, die, wenn sie aufgerufen wird, wird das Formular abzuschicken. Doch in Ihrem Beispiel document.formname.submit ist keine Methode mehr, aber der DOM-Knoten, die die Taste.

Dies geschieht, weil Elemente eines Formulars als Attribut seines DOM-Knoten verfügbar sind, über ihre name und id Attribute. Diese Formulierung ist ein wenig verwirrend, so kommt 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>

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

Doch auf diesem Beispiel gibt es ein Element der Form „Eintragen“ genannt, und das ist der Submit-Button, der mit document.forms.example.submit zugegriffen werden kann. Dies überschreibt den vorherigen Wert, der die Funktion war, dass Sie das Formular abzuschicken kann.

EDIT:

Wenn das Feld Umbenennung nicht gut für Sie ist, ist es eine andere Lösung. Kurz vorher schreiben, ich ließ 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 Wie zuverlässig ein HTML-Formular mit JavaScript einreichen? für nähere Details

Andere Tipps

Da Ihre Form hat sowohl eine id und ein name definiert, können Sie entweder eine davon verwenden:

Mit dem form -Tags id:

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

Mit dem form Attributs name tag:

document.forms['formname'].submit();

Versuchen Sie folgendes:

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

Die wahrscheinlichste Ursache ist IE verwirrend JavaScript-Variablen, IDs und Namen. Suchen Sie in Ihrer Quelle für etwas teilen Sie den Namen Ihrer Form.

  1. Legen Sie eine Eingabebutton im Formular aus.
  2. Give tabindex =. "- 1" auf sie
  3. Machen Sie es unsichtbar style = "display: none;"
  4. .

Like This

<input type="submit" tabindex="-1" style="display:none;" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top