Firefox не отправит форму, созданную JavaScript.

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

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

Ответы

Ответ 1

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

Ответ 2

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

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

var quantityInput = document.createElement('input'); quantityInput.name = 'количество';
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,
document.body.appendChild(форма);
form.submit();