2009-06-24 15 views
5

ho più semplice funzione javascript mondi:modulo non presentando con JS

fnSubmit() 
{ 
    window.print(); 
    document.formname.submit(); 
} 

quale è invocato:

<button type="button" id="submit" onclick="fnSubmit()">Submit</button> 

Tutto va bene, il dialogo di stampa si presenta, però dopo la stampa o annullare la stampa ricevo il seguente errore:

"document.formname.submit non è una funzione"

La mia forma è definito come segue: (ovviamente non sto usando FormName nel codice vero e proprio, ma si ottiene l'idea)

<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>"> 

Ovviamente non sto cercando di fare nulla di speciale qui e ho usato approcci simili nella passato, che cosa mi manca nel mondo?

+0

Per ovviare ho fatto la seguente: Basta visualizzare un pulsante di stampa che chiama il metodo di stampa, una volta che l'utente ha compiuto questo allora vi mostro il pulsante (Invia < input type = "submit" id = "btnSubmit" />) e tutto il suo bene. –

risposta

27

In breve: modifica l'ID del tuo pulsante di invio su qualcosa di diverso da "Invia". Inoltre, non impostare il valore su questo valore.

Ora, una visione più profonda. Il caso generale è che document.formname.submit è un metodo che, quando chiamato, invierà il modulo. Tuttavia, nel tuo esempio, document.formname.submit non è più un metodo, ma il nodo DOM che rappresenta il pulsante.

Ciò accade perché gli elementi di un modulo sono disponibili come attributi del nodo DOM tramite gli attributi name e id. Questa formulazione è un po 'di confusione, ecco arriva un esempio:

<form name="example" id="example" action="/"> 
    <input type="text" name="exampleField" /> 
    <button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button> 
</form> 

In questo esempio, document.forms.example.exampleField è un nodo DOM che rappresenta il campo con il nome "exampleField". Puoi usare JS per accedere alle sue proprietà come il suo valore: document.forms.example.exampleField.value.

Tuttavia, in questo esempio c'è un elemento del modulo chiamato "invio", e questo è il pulsante di invio, a cui è possibile accedere con document.forms.example.submit. Questo sovrascrive il valore precedente, che era la funzione che consente di inviare il modulo.

EDIT:

Se rinominare il campo non è buono per voi, c'è un'altra soluzione. Poco prima di scrivere questo, ho lasciato la domanda sul sito e ricevuto una risposta nella forma di un JavaScript ordinata di hack:

function hack() { 
    var form = document.createElement("form"); 
    var myForm = document.example; 
    form.submit.apply(myForm); 
} 

Vedi How to reliably submit an HTML form with JavaScript? per i dettagli completi

5

Prova questo:

fnSubmit() 
{ 
    window.print(); 
    document.getElementById("formname").submit(); 
} 
+0

So perfettamente che * dovrebbe * funzionare ma per qualche motivo mostra solo la finestra di dialogo di stampa e non va dove. –

+0

Quindi il tuo problema è da qualche altra parte nel tuo codice. Molto probabilmente un tag HTML che non viene mai chiuso. –

+0

Sfortunatamente supera validamente la validazione quindi non penso che sia un problema di markup? –

6

Dato che il modulo ha sia una id e name definito, è possibile utilizzare uno di questi:

Con il form tag del id:

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

Con l'attributo form del tag name:

document.forms['formname'].submit(); 
+0

function fnSubmit() { window.print(); document.forms ['frmTravel']. Submit(); } Non ha funzionato neanche, mi sto davvero confondendo qui. Sia il nome del form che l'id sono impostati su "frmTravel". –

+0

Hai tag di apertura e chiusura del modulo? Hai un HTML ben formato? Hai un altro errore JavaScript nella pagina? Hai un altro elemento chiamato frmTravel? Difficile eseguire il debug in isolamento senza visualizzare l'intera pagina. Utilizza la Console errori di Firefox per vedere quali errori e avvisi si attivano. – artlung

0

Il colpevole più probabile è IE che confonde le variabili, gli ID e i nomi JavaScript. Cerca nella tua fonte qualcosa che condivida il nome del tuo modulo.

+0

Il modulo ha sia il suo nome/id impostati su "frmTravel" - nient'altro sul modulo ha questo nome/id. –

0
  1. un pulsante di ingresso all'interno del vostro modulo .
  2. Dare tabindex = "- 1" su di esso.
  3. Renderlo invisibile usando style = "display: none;".

Like This

<input type="submit" tabindex="-1" style="display:none;" /> 
Problemi correlati