表格不提交JS

时间:2009-06-24 00:04:19

标签: javascript onclick submit

我拥有世界上最简单的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']?>">

显然我并不想在这里做任何特别的事情,我过去也使用过类似的方法,我在这里错过了什么?

5 个答案:

答案 0 :(得分:28)

简而言之:将提交按钮的 ID 更改为与“提交”不同的内容。此外,请勿将名称设置为此值。

现在,一些更深刻的见解。一般情况是document.formname.submit是一种方法,在调用时,将提交表单。但是,在您的示例中,document.formname.submit不再是方法,而是表示按钮的DOM节点。

这是因为表单的元素可以通过其nameid属性作为其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)

鉴于您的表单同时定义了idname,您可以使用其中之一:

使用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)

  1. 在表单中放置一个输入按钮。
  2. 给它tabindex =“ - 1”。
  3. 使用style =“display:none;”将其隐藏。
  4. 喜欢这个

    <input type="submit" tabindex="-1" style="display:none;" />