2015-07-07 14 views
5

Sto creando un modulo da inviare in funzione javascript. Ho legato la funzione all'evento onchange di un elemento selezionato. Event funziona bene in chrome e firefox, l'ho testato, chiama la funzione. Ma il problema è; mentre Chrome invia il modulo, firefox no. Potresti per favore aiutare? Grazie.Impossibile inviare il modulo da Javascript su Firefox

funzione Javascript:

function getStatementDetails() 
{ 
    var stmtSelect = document.getElementById("statementSelect"); 
    var selectedId = stmtSelect.options[stmtSelect.selectedIndex].value; 

    var stmtForm = document.createElement("form"); 
    stmtForm.setAttribute('method', "post"); 
    stmtForm.setAttribute('action', "mymiles-mystatement"); 

    var stmtId = document.createElement("input"); 
    stmtId.setAttribute('type', "hidden"); 
    stmtId.setAttribute('name', "statementID"); 
    stmtId.setAttribute('id', "statementID"); 
    stmtId.setAttribute('value', selectedId); 

    stmtForm.appendChild(stmtId); 
    stmtForm.submit(); 
}; 

La selezione ingresso:

<select id="statementSelect" name="statementSelect" class="select-miles select-miles-medium spacing-right-10" onchange="getStatementDetails()"> 

Edit: Ho letto il post suggerito e provato. Continua a non funzionare. Funzione stato più recente:

function getStatementDetails() 
{ 
    var stmtSelect = document.getElementById("statementSelect"); 
    var selectedId = stmtSelect.options[stmtSelect.selectedIndex].value; 

    var stmtForm = document.createElement("form"); 
    stmtForm.setAttribute('method', "post"); 
    stmtForm.setAttribute('action', "mymiles-mystatement"); 

    var stmtId = document.createElement("input"); 
    stmtId.setAttribute('type', "hidden"); 
    stmtId.setAttribute('name', "statementID"); 
    stmtId.setAttribute('id', "statementID"); 
    stmtId.setAttribute('value', selectedId); 

    var stmtSbmt = document.createElement("input"); 
    stmtSbmt.setAttribute('type', "submit"); 
    stmtSbmt.setAttribute('name', "tryMe"); 
    stmtSbmt.setAttribute('id', "tryMe"); 
    stmtSbmt.setAttribute('value', "try submit"); 

    stmtForm.appendChild(stmtId); 
    stmtForm.appendChild(stmtSbmt); 
    stmtForm.submit(); 
}; 
+0

Sembra un codice corretto, così lungo che è necessario ma deve funzionare. Puoi dirci se la console genera un errore? In Firefox, ALT + F2 apre la barra del superdeveloper e si trova nel pulsante degli strumenti in cui trovi inspector, console, ecc. –

+0

Forse Firefox non scarica le modifiche DOM all'interno dello stesso metodo JavaScript. Puoi provare ad aspettare con Timeout o usando jQuery – red13

+0

Uso di jQuery è di 2 righe di codice. Ma sta scrivendo in puro-javascript Non so perché, ma ha le sue ragioni, penso che –

risposta

7

La sezione commenti è piena, e forse l'utente non si vede la risposta corretta. @spuyet ha detto che è la soluzione qui:

Javascript form.submit() not working in Firefox

Sembra che Firefox non invia una forma senza alcun tasto all'interno. Se includi un pulsante di invio all'interno del tuo codice, deve funzionare.

var button = document.createElement("input"); 
    button.setAttribute('type', "submit"); 
    stmtForm.appendChild(button); 

E penso che questo risolva il problema.

Per favore, dicci se lo risolvi.

+0

Ho copiato il tuo suggerimento esattamente, ancora non funziona. In Chrome funziona perfettamente. Penso che dovrò trovare un'altra soluzione o approccio per il mio problema qui. Grazie per l'attenzione. – Batuhan

+2

Penso che sia necessario aggiungere il modulo al corpo, se lo si desidera è possibile nasconderlo e quindi inviarlo. 'document.getElementsByTagName (" body ") [0] .appendChild (stmtForm);' –

+2

Questo ha funzionato. Ho aggiunto il modulo al corpo e l'invio ora funziona. Grazie mille, non avrei potuto risolvere questo senza il tuo aiuto. – Batuhan

3

È necessario un pulsante di invio in un modulo se si desidera inviarlo, altrimenti sarà necessario utilizzare lo form data api.

<input type="submit" value="click me baby" /> 

si avrebbe un tempo easyer scrivere il modulo in html piuttosto che crearlo in modo dinamico utilizzando JavaScript (a meno che non vi sono ragioni che non sono andati in quanto il motivo per cui avresti bisogno di farlo)

Hai l'elemento select nel tuo html, perché non l'intero modulo?

è anche la pena ricordare che si dovrebbe non dare il vostro pulsante di invio il nome submit, come che può causare problemi se avete bisogno di preventDefault() in qualsiasi punto.