Firefox не отправит форму, созданную JavaScript - PullRequest
14 голосов
/ 06 марта 2011

Мне нужно создать форму с несколькими входами, когда происходит событие.Мой код ниже.

Chrome отправляет нормально - появляется окно предупреждения и страница меняется.

Firefox не работает - окно предупреждения отображается, но страница остается прежней. Как я могу заставить Firefox отправить форму?

var idsInput = document.createElement('input');
idsInput.name = 'itemIds';
idsInput.value = ids;

var quantityInput = document.createElement('input');;
quantityInput.name = 'quantity';
quantityInput.value = 1;

var authTokenInput = document.createElement('input');
authTokenInput.name = 'authenticityToken';
authTokenInput.value = '${session.getAuthenticityToken()}';

var submitInput = document.createElement('input');
submitInput.type = 'submit';
submitInput.value = 'anything';

var form = document.createElement('form');;
form.action = '@{Checkout.setItemsQuantityHandler}';
form.method = 'POST';
form.elements[0] = idsInput;
form.elements[1] = quantityInput;
form.elements[2] = authTokenInput;
form.elements[3] = submitInput;
form.submit();

alert('after submit()'); // for debugging only

Ответы [ 2 ]

23 голосов
/ 06 марта 2011

FF требует, чтобы он уже был в DOM. Установите форму display:none и добавьте ее в существующий элемент в DOM, а затем отправьте.

6 голосов
/ 15 мая 2013

Попробуйте это ...

var idsInput = document.createElement ('input');
idsInput.name = 'itemIds';
idsInput.value = ids;

var amountInput = document.createElement ('input');
QuantityInput.name = 'Количество';
amountInput.value = 1;

var authTokenInput = document.createElement ('input');
authTokenInput.name = 'authenticityToken';
authTokenInput.value = '$ {session.getAuthenticityToken ()}';

var submitInput = document.createElement ('input');
submitInput.type = 'submit';
submitInput.value = 'что-нибудь';

var form = document.createElement ('form');
form.action = '@ {Checkout.setItemsQuantityHandler}';
form.method = 'POST';
form.elements [0] = idsInput;
form.elements [1] = amountInput;
form.elements [2] = authTokenInput;
form.elements [3] = submitInput;
document.body.appendChild (форма);
form.submit ();

...