Fehler "Senden ist keine Funktion" in JavaScript

263

Kann mir jemand sagen, was mit diesem Code falsch läuft? Ich habe versucht, ein Formular mit JavaScript zu senden, aber der Fehler ".submit ist keine Funktion" wird angezeigt. Weitere Details zum Code finden Sie unten:

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction()" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

Ich habe es auch versucht:

<script type="text/javascript">
    function submitAction()
    {
        document.forms["frmProduct"].submit();
    }
</script>

Beide zeigen mir den gleichen Fehler :(

Jin Yong
quelle
Welcher Browser gibt Ihnen diese Nachricht? Können Sie die komplette Quelle posten?
Harto
Wenn man bedenkt, dass der veröffentlichte Code sowohl in IE7 als auch in Chrome2 für mich funktioniert, stimmt möglicherweise etwas mit dem Code nicht, den Sie nicht gepostet haben?
Lasse V. Karlsen
11
Vielleicht haben Sie ein Feld mit dem Namen oder der ID submit und daher wird .submit () von diesem Feld beschattet?
Lasse V. Karlsen
Dieser Fehler trat auf, wenn Sie dieselbe ID = "frmProduct" in verschiedenen Elementen haben.
Optimaz ID

Antworten:

734

Senden ist keine Funktion

bedeutet, dass Sie Ihre Senden-Schaltfläche oder ein anderes Element benannt haben submit. Benennen Sie die Taste in um btnSubmitund Ihr Anruf wird auf magische Weise funktionieren.

Wenn Sie die Schaltfläche Senden benennen, überschreiben Sie die submit()Funktion im Formular.

Epascarello
quelle
55
Hier ist ein praktischer Trick. Wenn Sie mit der Schaltfläche "Senden" nicht weiterkommen, #submitkönnen Sie dies umgehen, indem Sie die submit()Methode einer anderen Formularinstanz stehlen , z document.createElement('form').submit.call(document.frmProduct).
Neil E. Pearson
35
Es scheint, dass jeder dies auf die harte Tour lernen muss. Würde eine gute Frage zum Vorstellungsgespräch stellen
SeanDowney
9
Ich habe einfach den Namen = 'submit' entfernt und Bob ist deine Tante, es hat funktioniert !!
Zzapper
2
Erstaunt, dass ich noch nie darauf gestoßen bin, aber leider war das das Problem!
Natebeaty
3
Ich habe gerade meine 2-3 Stunden für dieses Problem verschwendet, vielen Dank für die Antwort
Mehul Prajapati
12
<form action="product.php" method="post" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">

document.getElementById("submit_value").onclick = submitAction;

function submitAction()
{
    document.getElementById("frmProduct").submit();
    return false;
}
</script>

EDIT: Ich habe versehentlich die IDs ausgetauscht

Chad Grant
quelle
document.getElementById ("frmProduct"). submit ist keine Funktion :(
Jin Yong
1
Haben Sie mehr als ein Element mit der ID 'frmProduct'?
Tvanfosson
Durch Hinzufügen von submitAction als Handler für onsubmit und anschließendes Aufrufen von submit kann eine Endlosschleife erstellt werden. Der Handler sollte mit einem Klick auf die Schaltfläche verknüpft sein.
Tvanfosson
1
Genaue Antworten runterstimmen, oder? Lahme Jungs, treten Sie auf uns, um die Punkte zu bekommen, für die Sie Ihre Seelen verkaufen
Chad Grant
@Chad Grant - Konnte nicht mehr zustimmen.
Fenton
10

Stellen Sie sicher, dass kein anderes Formular mit demselben Namen vorhanden ist, und stellen Sie sicher, dass das Formular keinen Namen = "Senden" oder ID = "Senden" enthält.

Gopeca
quelle
9

Wenn Sie keine Möglichkeit zur Änderung haben name="submit", können Sie das Formular auch folgendermaßen einreichen:

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}
Terbiy
quelle
5
HTMLFormElement.prototype.submit.call(form)funktioniert auch
musa
5

Ich hatte das gleiche Problem, als ich eine MVC-Anwendung mit Masterseiten erstellte. Ich habe versucht, nach einem Element mit 'submit' als Namen zu suchen, wie oben erwähnt, aber das war nicht der Fall.

In meinem Fall wurden mehrere Tags auf meiner Seite erstellt, sodass einige Probleme beim Verweisen auf das richtige Formular auftraten.

Um dies zu umgehen, lasse ich die Schaltfläche das zu verwendende Formularobjekt handhaben:

onclick="return SubmitForm(this.form)"

und mit dem js:

function SubmitForm(frm) {
    frm.submit();
}
Quangahh
quelle
3

Dieses Thema hat bereits viele Antworten, aber das, was für mich am besten (und am einfachsten - eine Zeile!) Funktionierte, war eine Modifikation des Kommentars von Neil E. Pearson vom 21. April 2013:

Wenn Sie nicht mehr wissen, dass Ihre Senden-Schaltfläche #submit ist, können Sie dies umgehen, indem Sie die submit () -Methode einer anderen Formularinstanz stehlen.

Meine Änderung an seiner Methode und was für mich funktioniert hat:

document.createElement('form').submit.call(document.getElementById(frmProduct));

jlemley
quelle
2

Wenn Sie einem Formularelement den Namen submit geben, wird die Eigenschaft submit einfach schattiert. Stellen Sie sicher, dass Sie kein Formularelement mit dem Namen submit haben und dass Sie problemlos auf die Submit-Funktion zugreifen können.

Ahmed Eid
quelle
2

In der Tat ist die Lösung sehr einfach ...

Original:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct"
enctype="multipart/form-data">
    <input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">
</form>
<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

Lösung:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct" 
enctype="multipart/form-data">
</form>

<!-- Place the button here -->
<input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>
Zurc Soirrab
quelle
Können Sie bitte erklären, wie dies das Problem des OP löst?
Kingsley
Natürlich ist in diesem Fall (nur in diesem Fall) das Problem der Umfang.
Zurc Soirrab
1

Sie sollten diesen Code verwenden:

$(document).on("ready", function () {
       
        document.frmProduct.submit();
    });

AnilSengul
quelle
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich dabei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen. Dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen!
Filnor
0

Was ich benutzt habe ist

var enviar = document.getElementById("enviar");
enviar.type = "submit"; 

Nur weil alles andere nicht funktioniert hat.

compraspro.com
quelle
0

Die Lösung für mich bestand darin, das Attribut "form" der Schaltfläche festzulegen

<form id="form_id_name"><button name="btnSubmit" form="form_id_name" /></form>

oder ist js:

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();
ProtonIonNeutron
quelle
0

Mögliche Lösungen -
1.Stellen Sie sicher, dass Sie kein anderes Element mit Name / ID als Übermittlung haben. 2.
Versuchen Sie, die Funktion als onClick = "return submitAction();"
3 aufzurufen .document.getElementById("form-name").submit();

Ram Thota
quelle
-1

Du kannst es versuchen

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction(this)" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
function submitAction(element)
{
    element.form.submit();
}
</script>

Haben Sie nicht mehr als ein Formular mit demselben Namen?

Fabien Ménager
quelle
-1

Verwenden Sie getElementById:

document.getElementById ('frmProduct').submit ()
Ilya Birman
quelle