2009-05-07 9 views
194

Qualcuno può dirmi cosa non funziona con questo codice? Ho provato a inviare un modulo con JavaScript, ma un errore ".submit non è una funzione" mostrato. Vedi sotto per maggiori dettagli del codice:Errore "Invia non è una funzione" in JavaScript

<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 provato anche questo:

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

Entrambi mi mostrano lo stesso errore :(

+0

Quale browser ti dà questo messaggio? Puoi pubblicare la fonte completa? – harto

+0

Considerando che il codice postato funziona per me sia in IE7 sia in Chrome2, forse c'è qualcosa di sbagliato nel codice che non hai postato? –

+9

Forse hai un campo con il nome o l'id submit e quindi .submit() è ombreggiato da quel campo? –

risposta

527

presentare non è una funzione

significa che è chiamato il vostro pulsante di invio o di qualche altro elemento submit. Rinominare il pulsante su btnSubmit e la tua chiamata funzionerà magicamente.

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

+1

Ho appena trovato questo problema con il selenio. "Submit" sembra essere il nome standard per i pulsanti di invio negli accessi frontend typo3.>. < – AaL

+34

Ecco un trucco pratico. con il tuo pulsante di invio è '# submit', puoi aggirare il problema rubando il metodo' submit() 'di un'altra istanza del modulo, ad esempio : 'document.createElement ('form'). submit.call (document.frmProduct)'. –

+19

Sembra che tutti debbano imparare questo nel modo più difficile. Farebbe una buona domanda di colloquio di lavoro – SeanDowney

8
<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 sostituito il id circa

+0

document.getElementById ("frmProduct"). Submit non è una funzione :( –

+1

Hai più di un elemento con id 'frmProduct? – tvanfosson

+0

Aggiungere submitAction come gestore per onsubmit e quindi richiamare submit da esso può creare un infinito loop Il conduttore deve essere associato con onclick del pulsante – tvanfosson

-1

Si può 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 si dispone di più di un modulo con lo stesso nome?

-1

Uso getElementById:

document.getElementById ('frmProduct').submit() 
4

Ho avuto lo stesso problema quando stavo creando un'applicazione MVC utilizzando con le pagine master. Provato cercando elemento con 'submit' come nomi come menzionato sopra ma non era il caso.

Per il mio caso ha creato più tag sulla mia pagina quindi c'erano alcuni problemi che fanno riferimento al modulo corretto.

Per ovviare a questo io farò la maniglia tasto che formano oggetto da utilizzare:

onclick="return SubmitForm(this.form)" 

e con le js:

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

assicurarsi che non v'è alcun altro modulo con il stesso nome e assicurarsi che non ci sia name = "submit" o id = "submit" nel modulo.

0

Quello che ho usato è

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

Proprio perché tutto il resto non ha funzionato.

1

dando a un elemento del modulo un nome di invio ombreggia la proprietà di invio. assicurati di non avere un elemento del modulo con il nome submit e dovresti essere in grado di accedere alla funzione di invio bene.

1

Se si dispone di alcuna possibilità di cambiare name="submit" si può anche presentare forma in questo modo:

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

soluzione per me è stato quello di impostare l'attributo "forma" 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

Questo argomento ha già molte risposte, ma quello che ha funzionato meglio (un ! ND più semplice - una linea) per me era una modifica del commento di Neil E. Pearson da 21 Apr 2013:

Se sei bloccato con il pulsante di invio essere #submit, è possibile ottenere intorno ad esso rubando il metodo submit() di un'altra istanza del modulo.

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

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

0

Possibili soluzioni -
1.Accertarsi che non si dispone di qualsiasi altro elemento con il nome/id come Sottoscrivi.
2.Try chiamare la funzione come onClick = "return submitAction();"
3. document.getElementById("form-name").submit();