我有世界上最简单的 JavaScript 函数:
fnSubmit()
{
window.print();
document.formname.submit();
}
这是由以下人员调用的:
<button type="button" id="submit" onclick="fnSubmit()">Submit</button>
一切都很好,打印对话框显示,但是在打印或取消打印后,我收到以下错误:
“document.formname.submit 不是一个函数”
我的表单定义如下:(显然我没有在实际代码中使用 formname 但你明白了)
<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
显然我并不想在这里做任何特别的事情,而且我过去也使用过类似的方法,我到底错过了什么?
简而言之:改变id将提交按钮更改为与“提交”不同的内容。另外,不要设置name到这个值。
现在,一些更深入的见解。一般情况是这样的document.formname.submit
是一种方法,调用时将提交表单。然而,在你的例子中,document.formname.submit
不再是一个方法,而是代表按钮的 DOM 节点。
发生这种情况是因为表单的元素可以通过其 DOM 节点的属性来使用name
and id
属性。这个措辞有点混乱,所以举个例子:
<form name="example" id="example" action="/">
<input type="text" name="exampleField" />
<button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button>
</form>
在这个例子中,document.forms.example.exampleField
是一个 DOM 节点,表示名为“exampleField”的字段。您可以使用 JS 访问其属性,例如其值:document.forms.example.exampleField.value
.
然而,在这个例子中,表单中有一个名为“submit”的元素,这是提交按钮,可以通过以下方式访问:document.forms.example.submit
。这将覆盖以前的值,该值是允许您提交表单的函数。
EDIT:
如果重命名字段不适合您,还有另一种解决方案。在写这篇文章之前不久,我在网站上留下了这个问题,并以简洁的 JavaScript hack 的形式得到了回复:
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
See 如何使用 JavaScript 可靠地提交 HTML 表单?欲了解完整详情
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)