2015-07-07 25 views
5

Tworzę formularz do przesłania w funkcji javascript. Oparłem funkcję na zdarzeniu onchange wybranego elementu. Wydarzenie działa dobrze w chrome i firefox, przetestowałem go, wywołuje funkcję. Ale problem jest; podczas gdy chrome przesyła formularz, firefox nie. Czy mógłbyś mi pomóc? Dzięki.Nie można przesłać formularza z Javascript na Firefox

JavaScript funkcja:

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(); 
}; 

input select:

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

Edit: Czytałem sugerowanego post i spróbowałem. Wciąż nie działa. Funkcja najnowszy stan:

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

Wygląda na to, że jest poprawny kod, tak długo, że jest potrzebny, ale musi działać. Możesz nam powiedzieć, czy konsola zgłasza błąd? W firefox, ALT + F2 otwiera pasek superdeveloper i znajduje się w przycisku narzędzi, gdzie znajduje się inspektor, konsola itd. –

+0

Może Firefox nie spłukuje zmian DOM w ramach tej samej metody JavaScript. Możesz spróbować czekać z Timeout lub używając jQuery – red13

+0

Używanie jQuery to 2 linie kodu. Ale on pisze w czystym javascript, nie wiem dlaczego, ale ma swoje powody, myślę, że –

Odpowiedz

7

sekcji komentarzy jest pełny, a może użytkownik nie widać poprawną odpowiedź. @spuyet powiedział, że jest to rozwiązanie tutaj:

Javascript form.submit() not working in Firefox

Wydaje się, że Firefox nie wysłać formularz bez przycisku wewnątrz. Jeśli włączysz przycisk przesyłania w swoim kodzie, musi działać.

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

Myślę, że to rozwiązuje twój problem.

Poinformuj nas, jeśli go rozwiązałeś.

+0

Skopiowałem dokładnie Twoją sugestię, nadal nie działa. W Chrome działa idealnie. Myślę, że będę musiał znaleźć inne rozwiązanie lub podejście do mojego problemu tutaj. Dziękuję za uwagę. – Batuhan

+2

Myślę, że musisz dołączyć formularz do ciała, jeśli chcesz, możesz go ukryć, a następnie przesłać. 'document.getElementsByTagName (" body ") [0] .appendChild (stmtForm);' –

+2

To zadziałało. Dodałem formularz do treści, a przesyłanie działa. Dziękuję bardzo, nie mogłem rozwiązać tego bez twojej pomocy. – Batuhan

3

Musisz wysłać przycisk w formularzu, jeśli chcesz go przesłać, w przeciwnym razie musisz użyć form data api.

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

chcesz mieć easyer czas pisania formularz w formacie HTML, a następnie tworzenie go dynamicznie przy użyciu javascript (chyba że istnieją powody nie odeszłaś do jak dlaczego trzeba by zrobić)

Masz element select w swoim html, dlaczego nie cały formularz?

warto też wspomnieć, że należy nie dać przycisk Prześlij nazwę submit, jako że mogą powodować problemy, jeśli trzeba preventDefault() w dowolnym momencie.

Powiązane problemy