我拥有世界上最简单的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']?>">
显然我并不想在这里做任何特别的事情,我过去也使用过类似的方法,我在这里错过了什么?
答案 0 :(得分:28)
简而言之:将提交按钮的 ID 更改为与“提交”不同的内容。此外,请勿将名称设置为此值。
现在,一些更深刻的见解。一般情况是document.formname.submit
是一种方法,在调用时,将提交表单。但是,在您的示例中,document.formname.submit
不再是方法,而是表示按钮的DOM节点。
这是因为表单的元素可以通过其name
和id
属性作为其DOM节点的属性。这个措辞有点令人困惑,所以这里有一个例子:
<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
是表示名称为“exampleField”的字段的DOM节点。您可以使用JS访问其属性,例如其值:document.forms.example.exampleField.value
。
但是,在此示例中,有一个名为“submit”的表单元素,这是提交按钮,可以使用document.forms.example.submit
访问该按钮。这会覆盖以前的值,即允许您提交表单的函数。
修改强>
如果重命名该字段对您不利,还有另一种解决方案。在写这篇文章之前不久,我在网站上留下了一个问题,并以一个整洁的JavaScript黑客的形式得到了回复:
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
有关完整详情,请参阅How to reliably submit an HTML form with JavaScript?
答案 1 :(得分:6)
鉴于您的表单同时定义了id
和name
,您可以使用其中之一:
使用form
代码id
:
document.getElementById('formname').submit();
使用form
代码的name
属性:
document.forms['formname'].submit();
答案 2 :(得分:5)
试试这个:
fnSubmit()
{
window.print();
document.getElementById("formname").submit();
}
答案 3 :(得分:0)
最可能的罪魁祸首是IE混淆了JavaScript变量,ID和名称。在您的来源中搜索共享表单名称的内容。
答案 4 :(得分:0)
喜欢这个
<input type="submit" tabindex="-1" style="display:none;" />