此here,here和here以及其他地方有几个问题/答案,但它们似乎都是特定于JQuery的,并且似乎不适用于此(例如,我我不创建一个新的Form对象,这是文档中的一个现有表单。而且我 NOT 完全使用Jquery。
我有一个表单,由于IE7兼容性的原因,在提交之前必须进行修改。我必须从表单中删除所有BUTTON
标记,然后添加一个隐藏字段,但这都是现有HTML页面上的现有表单。此代码在IE和Chrome中正常运行,但在Firefox中不起作用(版本23和24都经过测试)。
buttonClickFunction(formName, buttonObject) {
var formObject = document.forms[formName];
var i = 0;
// Strip out BUTTON objects
for (i=0;i<formObject.length;i++) {
if (formObject[i].tagName === 'BUTTON') {
formObject[i].parentNode.removeChild(formObject[i]);
i--;
}
}
// Create new field
var newField = document.createElement('input');
newField.type = 'hidden';
newField.id=buttonObject.id;
newField.name = buttonObject.name;
if (buttonObject.attributes['value'] != null) {
newField.value = buttonObject.attributes['value'].value;
} else {
newField.value = buttonObject.value;
}
// Submit form
formObject.appendChild(newField);
document.forms[formName].appendChild(newField);
document.forms[formName].submit();
}
除document.forms[formName].submit()
我还试过formObject.submit()
之外 - 两者都可以在Chrome中使用但在Firefox中都失败了。我不知道为什么这不起作用 - 我已经通过JS跟踪并看到document.forms[formName].submit()
执行 - 没有异常出现但没有任何内容发送到服务器。
任何人都可以确定为什么Firefox不会提交此表单,以及我如何解决它?
答案 0 :(得分:20)
Firefox预计,当您提交表单时,您至少有一个提交按钮,这意味着应该有类似的内容:
<button type="submit">Click me</button>
或:
<input type="submit" value="Click me" />
当您在代码中使用第一个时,它将无效(因为您在提交表单之前删除所有按钮)。当您使用第二个选项时,它也可以在Firefox中使用。正如你在这个小提琴中看到的那样:http://jsfiddle.net/q9Dzc/1/
答案 1 :(得分:0)
对于任何人在使用页面位置更改/重新加载后提交Firefox的问题,您需要将重定向代码放在$ .post回调中:
$(".form").submit(function(e){
e.preventDefault();
$.post("submit.php", {data: textData}, function(){
history.go(-1);
});
return false;
});
答案 2 :(得分:0)
当form.submit()
在Firefox上不起作用,但在其他浏览器上起作用时,我也有类似的行为。只要确保表单中的所有按钮都包含type="button"
。