题
我拥有世界上最简单的javascript函数:
fnSubmit()
{
window.print();
document.formname.submit();
}
由以下人员召集:
<button type="button" id="submit" onclick="fnSubmit()">Submit</button>
一切都很好,打印对话框显示,但是在打印或取消打印后,我收到以下错误:
<!> quot; document.formname.submit不是函数<!> quot;
我的表单定义如下:(显然我没有在实际代码中使用formname,但你明白了)
<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
显然我并不想在这里做任何特别的事情,我过去也使用过类似的方法,我在这里错过了什么?
解决方案
简而言之:将提交按钮的 ID 更改为<!>提交<!>提交<!>。此外,请勿将名称设置为此值。
现在,一些更深刻的见解。一般情况是document.formname.submit
是一种方法,在调用时,将提交表单。但是,在您的示例中,name
不再是方法,而是表示按钮的DOM节点。
这是因为表单的元素可以通过其id
和document.forms.example.exampleField
属性作为其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.value
是一个DOM节点,表示名称为<!> quot; exampleField <!> quot;的字段。您可以使用JS访问其属性,例如其值:document.forms.example.submit
。
但是,在此示例中,有一个名为<!> quot; submit <!> quot;的表单元素,这是提交按钮,可以使用<=>访问。这会覆盖以前的值,即允许您提交表单的函数。
修改强>
如果重命名该字段对您不利,还有另一种解决方案。在写这篇文章之前不久,我在网站上留下了一个问题,并以一个整洁的JavaScript黑客的形式得到了回复:
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
请参阅如何使用JavaScript可靠地提交HTML表单? 以获取完整的详细信息
其他提示
鉴于您的表单同时定义了id
和name
,您可以使用以下任何一种:
使用form
标签的<=>:
document.getElementById('formname').submit();
使用<=>标记的<=>属性:
document.forms['formname'].submit();
试试这个:
fnSubmit()
{
window.print();
document.getElementById("formname").submit();
}
最可能的罪魁祸首是IE混淆了JavaScript变量,ID和名称。在您的来源中搜索共享表单名称的内容。
- 在表单中放置一个输入按钮。
- 给tabindex = <!> quot; -1 <!> quot;在它上面。
- 使用style = <!> << display:none; <!> quot;。 使其不可见 醇>
喜欢这个
<input type="submit" tabindex="-1" style="display:none;" />