Errore "Invia non è una funzione" in JavaScript


264

Qualcuno può dirmi cosa non va in questo codice? Ho provato a inviare un modulo con JavaScript, ma viene visualizzato un errore ".submit non è una funzione". Vedi sotto per maggiori dettagli sul codice:

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

Ho anche provato questo:

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

Entrambi mi mostrano lo stesso errore :(


Quale browser ti dà questo messaggio? Puoi pubblicare la fonte completa?
Harto,

Considerando che il codice pubblicato funziona per me in IE7 e Chrome2, allora forse c'è qualcosa di sbagliato nel codice che non hai pubblicato?
Lasse V. Karlsen,

11
Forse hai un campo con il nome o l'id submit e quindi .submit () è ombreggiato da quel campo?
Lasse V. Karlsen,

quell'errore si è verificato quando hai lo stesso id = "frmProduct" in elementi diversi.
ID Optimaz,

Risposte:


736

submit non è una funzione

significa che hai chiamato il tuo pulsante di invio o qualche altro elemento submit. Rinomina il pulsante in btnSubmite la tua chiamata funzionerà magicamente.

Quando si assegna un nome al pulsante Invia, si ignora la submit()funzione nel modulo.


55
Ecco un trucco utile. Se sei bloccato con il pulsante di invio in corso #submit, puoi aggirarlo rubando il submit()metodo di un'altra istanza del modulo , ad esempio:document.createElement('form').submit.call(document.frmProduct) .
Neil E. Pearson,

35
Sembra che tutti debbano imparare questo nel modo più duro. Farebbe una buona domanda per un colloquio di lavoro
SeanDowney,

9
Ho semplicemente rimosso il nome = 'submit' e Bob's your Aunty ha funzionato !!
zzapper

2
Stupito di non essermi mai imbattuto in questo, ma purtroppo quello era il problema!
natebeaty

3
Ho appena perso le mie 2-3 ore per questo problema, grazie mille per la risposta
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: ho accidentalmente scambiato l'id in giro


document.getElementById ("frmProduct"). submit non è una funzione :(
Jin Yong

1
Hai più di un elemento con l'id 'frmProduct'?
Tvanfosson,

L'aggiunta di submitAction come gestore per onsubmit e quindi l'invocazione di submit da esso può creare un ciclo infinito. Il gestore deve essere associato al clic del pulsante.
tvanfosson,

1
Downvoting risposte accurate eh? ragazzi zoppi, calpestateci per ottenere quei punti per i quali vendete le vostre anime
Chad Grant,

@Chad Grant - Non potrei essere più d'accordo.
Fenton,

10

Assicurarsi che non vi sia un altro modulo con lo stesso nome e assicurarsi che non ci sia name = "submit" o id = "submit" nel modulo.


9

Se non hai l'opportunità di cambiare name="submit"puoi anche inviare il modulo in questo modo:

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}

5
HTMLFormElement.prototype.submit.call(form)funziona anche
musa,

5

Ho avuto lo stesso problema quando stavo creando un'applicazione MVC utilizzando con pagine master. Ho provato a cercare l'elemento con "submit" come nomi come menzionato sopra, ma non è stato il caso.

Nel mio caso ha creato più tag sulla mia pagina, quindi c'erano alcuni problemi che si riferivano al modulo corretto.

Per ovviare a questo, lascerò che il pulsante gestisca quale oggetto modulo usare:

onclick="return SubmitForm(this.form)"

e con il js:

function SubmitForm(frm) {
    frm.submit();
}

3

Questo argomento ha già molte risposte, ma quello che ha funzionato meglio (e più semplice - una riga!) Per me è stata una modifica del commento fatto da Neil E. Pearson del 21 aprile 2013:

Se sei bloccato con il pulsante di invio in #submit, puoi aggirarlo rubando il metodo submit () di un'altra istanza di modulo.

La mia modifica al suo metodo e cosa ha funzionato per me:

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


2

assegnando a un elemento del modulo un nome di submit semplicemente ombreggerà la proprietà submit. assicurati di non avere un elemento del modulo con il nome submit e dovresti essere in grado di accedere correttamente alla funzione submit.


2

In effetti, la soluzione è molto semplice ...

Originale:

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

Soluzione:

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

Puoi spiegare come questo risolve il problema del PO.
Kingsley,

Di sicuro, in questo caso (solo in questo caso) il problema è l'ambito.
Zurc Soirrab,

1

Dovresti usare questo codice:

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


Sebbene questo frammento di codice possa risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Cerca inoltre di non aggiungere il tuo codice a commenti esplicativi, ciò riduce la leggibilità sia del codice che delle spiegazioni!
Filnor,

0

Quello che ho usato è

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

Solo perché tutto il resto non ha funzionato.


0

La soluzione per me era impostare l'attributo "form" del pulsante

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

o è js:

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

0

Possibili soluzioni -
1.Assicurarsi di non avere altri elementi con nome / ID come invio.
2. Prova a chiamare la funzione come onClick = "return submitAction();"
3.document.getElementById("form-name").submit();


-1

Puoi provare

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

Non hai più di un modulo con lo stesso nome?


-1

Usa getElementById:

document.getElementById ('frmProduct').submit ()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.