2012-01-04 14 views
18

Pregunta: ¿Cómo puede enviar un formulario con Javascript si una entrada de formulario tiene el nombre submit?¿Cómo se envía un formulario con Javascript cuando el nombre de la entrada es "enviar"?

Antecedentes: Estoy redirigiendo al usuario a otra página con un formulario oculto HTML. No puedo cambiar el nombre en las entradas (ocultas), ya que la otra página está en otro servidor y las entradas deben ser exactamente como son. Mi formulario HTML es el siguiente:

<form id="redirectForm" method="post" action="http://www.example.com/"> 
    <input name="search" type="hidden" value="search for this" /> 
    <input name="submit" type="hidden" value="search now" /> 
</form> 

utilizo la siguiente línea de javascript para enviar el formulario automáticamente hoy:

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

Sin embargo, ya que el nombre de una entrada es "enviar" (que no puede ser algo más, o el otro servidor no manejará la solicitud), document.getElementById('redirectForm').submit se refiere a la entrada ya que anula la función de formulario submit().

El mensaje de error en Firefox es: Error: document.getElementById("requestform").submit is not a function. Mensaje de error similar en Safari.

+0

¿Ha tratado con 'document.getElementById ('redirectForm') submit.click()'.? : P – Stefan

+0

@Stefan Lo siento, pero no envía el formulario. La entrada con el nombre 'submit' no tiene los atributos de tipo' submit' o 'button', sino' hidden'. – AndersTornkvist

Respuesta

14

Digno de mención: A menudo es mucho más fácil cambiar el nombre de la entrada a algo que no sea "enviar". Utilice la solución a continuación solo si eso no es posible.

Es necesario para obtener la función submit de una forma diferente:

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

Si usted tiene ya otra etiqueta <form>, que se puede utilizar en lugar de crear otro.

+6

Creo que es un desperdicio crear un elemento solo para obtener una función del mismo. No estoy seguro si lo hizo por razones de navegador cruzado, pero ¿qué pasa con 'var theForm = document.getElementById ('redirectForm'); theForm.constructor.prototype.submit.call (theForm); '? – pimvdb

+0

@pimvdb: ¿Eso funcionará? – SLaks

+0

Lo hace en Chrome: http://jsfiddle.net/GVmzw/. – pimvdb

5

Uso submit() método de HTMLFormElement.prototype:

HTMLFormElement.prototype.submit.call(document.getElementById('redirectForm')); 
Cuestiones relacionadas