2010-04-27 10 views
28

Sto cercando di intercettare l'invio di un modulo per modificare il valore della mia etichetta keywords.Impossibile `submit()` un modulo html dopo aver intercettato l'invio con javascript

ho il seguente codice:

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

Quando ho eseguito questo in cromo e fare clic sul cambiamenti parole chiave etichetta pulsante di invio per boo, ma la console javascript dice:

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

Come può Invio il modulo con le parole chiave manipolate?

+1

Che cosa è un 'o più specificamente, cosa intendevi veramente inserire nell'attributo type? –

+0

oops. hai ragione. cambiando 'type =" label "' a 'type =" text "' –

risposta

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

Ecco fatto! La tua modifica di 'type =" button "' a 'type =" submit "' ha funzionato. Grazie! –

+1

Immagino che fosse la rimozione di 'form.submit()' – seanmonstar

+0

Jacob la perfezionò ulteriormente, ma semplicemente cambiando 'type =" button "' a 'type =" submit "' fa funzionare il codice. Prenderò anche le sue altre modifiche, dal momento che sembra meno hacky del mio modo. –

117

La ragione per l'errore quando si cerca di chiamare form.submit() è che il vostro pulsante di invio si chiama "submit". Ciò significa che la proprietà "submit" dell'oggetto Form è ora un riferimento al pulsante di invio, sostituendo il metodo "submit" del prototipo del modulo.

Rinominare il pulsante di invio consente di chiamare il metodo submit() senza errori.

+6

Signore, sei un DIO! Mai saputo di questo. Stavo usando '$ ('form: submit'). Click();' e stava bloccando firefox mentre la console di Firebug era aperta. Ho provato a cambiare. Smettere di pensare che avrebbe bypassato il clic del pulsante, ma non ha funzionato affatto! L'ho visto, ho cambiato il nome del pulsante di invio e HEY PRESTO! Funziona! Niente più crash con firebug aperto. XOXOXOXOXOXOX !!! – Benno

+1

Penso che questa sia la risposta alla domanda reale, l'errore è stato generato da.submit(), anche se la funzionalità dell'applicazione funziona, l'errore sarebbe stato corretto cambiando il nome del pulsante di invio senza rimuovere f.submit(); Grazie Chris, tu rock! – raphie

+1

Ecco uno strumento di test per verificare questo (+ poche cose simili): http://kangax.github.com/domlint/ –

0

Vedere jQuery .submit().

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

Il problema è che quando qualche elemento è <input type="submit" name="submit" /> submit() metodo non funziona. La migliore soluzione a questa situazione è di cambiare il nome dell'input di tipo di invio a qualcos'altro, ad esempio button-submit, ecc.

0

Basta cambiare il nome del pulsante di invio e funzionerà!

0

Chris Butler ha spiegato bene il problema.

È possibile utilizzare un metodo nativo inviare il metodo di HTMLFormElement per risolvere un problema. Nel tuo caso:

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

trovato questo molto utile, l'errore è stato causato da un altro elemento il modulo con nome = presentare dopo la ridenominazione del document.getElementById('myform').submit() lavorato

Problemi correlati