2009-05-07 18 views
194

¿Alguien me puede decir qué está mal con este código? Traté de enviar un formulario con JavaScript, pero se muestra un error ".submit no es una función". Véase más abajo para más detalles del código:Error "Enviar no es una función" en 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> 

También probé esto:

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

Ambos me muestran el mismo error :(

+0

Qué navegador le da este mensaje? ¿Puedes publicar la fuente completa? – harto

+0

Considerando que el código publicado funciona para mí tanto en IE7 como en Chrome2, entonces ¿hay algo mal en el código que no ha publicado? –

+9

¿Quizás tiene un campo con el nombre o el id de envío y, por lo tanto, enviar sombra a este campo? –

Respuesta

527

presentar no es una función

significa que usted designó a su botón de envío o algún otro elemento submit. Cambie el nombre del botón a btnSubmit y su llamada funcionará mágicamente.

Cuando nombra el botón enviar, anula la función submit() en el formulario.

+1

Acabo de toparme con este problema con el selenio. "Enviar" parece ser el nombre estándar para enviar botones en los inicios de sesión fronterizos de typo3.>. < – AaL

+34

Este es un truco útil. con su botón de envío siendo '# submit', puede evitarlo robando el método' submit() 'de otra instancia de formulario, por ejemplo : 'document.createElement ('form'). submit.call (document.frmProduct)'. –

+19

Parece que todos tienen que aprender esto de la manera difícil. Haría una buena pregunta de entrevista de trabajo – 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: Por error, he intercambiado los identificadores alrededor de

+0

document.getElementById ("frmProduct"). Submit no es una función :( –

+1

¿Tiene más de un elemento con el id 'frmProduct?? – tvanfosson

+0

Agregar submitAction como controlador para onsubmit y luego invocar submit desde él puede crear un infinito El manejador debe estar asociado con el clic del botón. – tvanfosson

-1

Puede intentar

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

¿No tiene más de un formulario con el mismo nombre?

-1

Uso getElemenById:

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

Tuve el mismo problema cuando estaba creando una aplicación MVC que utilizaba con páginas maestras. Intenté buscar elemento con 'enviar' como nombres como se mencionó anteriormente pero no fue el caso.

Para mi caso, creó varias etiquetas en mi página, por lo que hubo algunos problemas al hacer referencia al formulario correcto.

Para solucionar este voy a dejar el mango botón que forman objeto de empleo:

onclick="return SubmitForm(this.form)" 

y con las JS:

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

Verificar si no hay otra forma con el mismo nombre y asegúrese de que no hay ningún nombre = "enviar" o id = "enviar" en el formulario.

0

lo que he utilizado es

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

El hecho de que todo lo que no funcionó más.

1

dando un elemento de formulario, un nombre de envío sombreará fácilmente la propiedad de envío. asegúrese de que no tiene un elemento de formulario con el nombre de envío y debe poder acceder a la función de envío muy bien.

1

Si usted no tiene ninguna oportunidad de cambiar name="submit" También puede enviar la forma de esta manera:

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

solución para mí era establecer el atributo de "forma" del botón

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

o es js :

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

Este tema tiene muchas respuestas, pero el que mejor funcionaba (! ª más simple - una línea) para mí fue una modificación del comentario hecho por Neil E. Pearson de Abr 21 de 2013:

Si está atrapado con su botón de envío siendo #submit, puede obtener alrededor de ella robando el método submit() de otra instancia de formulario.

Mi modificación de su método, y lo que funcionó para mí:

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

0

soluciones posibles -
1. Asegúrese de que usted no tiene ningún otro elemento con el nombre/ID como enviar.
2.Try para llamar a la función que onClick = "return submitAction();"
3. document.getElementById("form-name").submit();

Cuestiones relacionadas