2010-04-27 23 views
28

Estoy tratando de interceptar el envío de un formulario para cambiar el valor de mi etiqueta keywords.No se puede `submit()` un formulario html después de interceptar el envío con javascript

tengo el siguiente código:

<HTML> 
<FORM name="searchForm" method="get" action="tmp.html" > 
<input type="text" name="keywords" /> 
<input type="button" name="submit" value="submit" onclick="formIntercept();"/> 
</FORM> 
<SCRIPT language="JavaScript"> 
document.searchForm.keywords.focus(); 
function formIntercept() { 
    var f = document.forms['searchForm']; 
    f.keywords.value = 'boo'; 
    f.submit(); 
}; 
</SCRIPT> 
</HTML> 

Cuando ejecuto esto en cromo y haga clic en el botón de enviar los cambios de palabras clave de etiquetas para boo, pero la consola Javascript dice:

Uncaught TypeError: Property 'submit' of object <#an HtmlFormElement> is not a function. 

¿Cómo puede Presento el formulario con las palabras clave manipuladas?

+1

¿Qué es un 'o más específicamente, ¿qué es lo que realmente quisiste poner en el atributo de tipo? –

+0

oops. tienes razón. cambiando 'type =" label "' to 'type =" text "' –

Respuesta

0
<html> 
<head></head> 
<body> 
<form name="searchForm" method="get" action="tmp.html" onsubmit="formIntercept(this);"> 
<input type="text" name="keywords" /> 
<input type="submit" name="submit" value="submit"/> 
</form> 
<script type="text/javascript"> 
document.searchForm.keywords.focus(); 
function formIntercept(form) { 
    form.keywords.value = 'boo'; 
    //form.submit(); 
} 
</script> 
</body> 
</html> 
+0

¡Eso fue todo! Su cambio de 'tipo =" botón "' a 'tipo =" enviar "' funcionó. ¡Gracias! –

+1

me imagino que fue la eliminación de 'form.submit()' – seanmonstar

+0

Jacob lo modificó aún más, pero el simple hecho de cambiar 'type =" button "' to 'type =" submit "' hace que el código funcione. Tomaré sus otros cambios también, sin embargo, ya que parece menos hacky que a mi manera. –

117

El motivo del error al intentar llamar form.submit() es que el botón de enviar se llama "enviar". Esto significa que la propiedad "enviar" de su objeto Formulario ahora es una referencia al botón Enviar, anulando el método "enviar" del prototipo del formulario.

Cambiar el nombre del botón de enviar le permitirá llamar al método submit() sin error.

+6

¡Usted señor, es un DIOS! Nunca lo supe de esto Estaba usando '$ ('form: submit'). Click();' y estaba bloqueando Firefox mientras la consola Firebug estaba abierta. Traté de cambiar a .submit pensando que omitiría el clic del botón, ¡pero no funcionó en absoluto! Vi esto, cambié el nombre del botón de enviar y HEY PRESTO! ¡Funciona! No más chocar con firebug abierto tampoco. XOXOXOXOXOXOX !!! – Benno

+1

Creo que esta es la respuesta a la pregunta real, el error fue generado por.submit(), aunque la funcionalidad de la aplicación funciona, el error podría haberse solucionado cambiando el nombre del botón de envío sin eliminar f.submit(); Gracias, Chris, ¡Rock! – raphie

+1

Aquí hay una herramienta de prueba para controlar esto (+ algunas cosas similares): http://kangax.github.com/domlint/ –

0

Ver jQuery .submit().

$("form").submit(function() { 
    // TODO tweak your form data before it gets sent 
}); 
9

El problema es que cuando algún elemento es <input type="submit" name="submit" /> submit() método no funcionará. La mejor solución para esta situación es cambiar el nombre de esa entrada de tipo de envío a otra cosa, por ejemplo, enviar un botón, etc.

0

¡Simplemente cambie el nombre del botón de enviar y funcionará!

0

Chris Butler explicó el problema bien.

Puede utilizar un método nativo para enviar de HTMLFormElement para solucionar un problema. En su caso:

function formIntercept() { 
    var f = document.forms['searchForm']; 
    f.keywords.value = 'boo'; 
    HTMLFormElement.prototype.submit.call(f); 
}; 
0

pareció muy útil, el error fue causado por otro elemento en forma con el nombre = submit después de cambiar el nombre del document.getElementById('myform').submit() trabajaron

Cuestiones relacionadas