14

当事件发生时,我需要创建一个带有一些输入的表单。我的代码如下。

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
4

2 回答 2

23

FF 要求它已经在 DOM 中。将表单设置为display:none并将其添加到 DOM 中的现有元素,然后提交。

于 2011-03-06T02:34:03.823 回答
6

试试这个...

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

var quantityInput = document.createElement('input');
数量输入.name = '数量';
数量输入.值 = 1;

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

var submitInput = document.createElement('input');
submitInput.type = '提交';
submitInput.value = '任何东西';

var form = document.createElement('form');
form.action = '@{Checkout.setItemsQuantityHandler}';
form.method = 'POST';
form.elements[0] = idsInput;
form.elements[1] = 数量输入;
form.elements[2] = authTokenInput;
form.elements[3] = 提交输入;
document.body.appendChild(form);
form.submit();

于 2013-05-15T03:43:14.123 回答