我拥有世界上最简单的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节点。

这是因为表单的元素可以通过其iddocument.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表单? 以获取完整的详细信息

其他提示

鉴于您的表单同时定义了idname,您可以使用以下任何一种:

使用form标签的<=>:

document.getElementById('formname').submit();

使用<=>标记的<=>属性:

document.forms['formname'].submit();

试试这个:

fnSubmit()
{
  window.print();
  document.getElementById("formname").submit();
}

最可能的罪魁祸首是IE混淆了JavaScript变量,ID和名称。在您的来源中搜索共享表单名称的内容。

  1. 在表单中放置一个输入按钮。
  2. 给tabindex = <!> quot; -1 <!> quot;在它上面。
  3. 使用style = <!> << display:none; <!> quot;。
  4. 使其不可见

    喜欢这个

    <input type="submit" tabindex="-1" style="display:none;" />
    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top