形成不与JS提交(Form not submitting with JS)

2019-09-16 19:56发布

我有世界上最简单的JavaScript函数:

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

这就是所谓的:

<button type="button" id="submit" onclick="fnSubmit()">Submit</button>

一切都很好,但是打印后或取消打印我收到以下错误打印对话框显示出来,:

“document.formname.submit不是一个函数”

我的形式定义如下:(显然我不是在实际的代码中使用表格名称,但你的想法)

<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">

很显然,我不是想在这里做什么特别的事情,我已经在过去使用类似的方法,在世界上我是什么在这里失踪?

Answer 1:

简而言之:你的提交按钮的ID更改为不是“提交”不同。 另外,不要在名称设置为这个值要么。

现在,一些更深入的了解。 一般的情况是, document.formname.submit是,调用它时,将提交表单的方法。 然而,在你的榜样, document.formname.submit是不再的方法,但DOM节点代表的按钮。

这是因为一种形式的元素都可以作为它的DOM节点的属性,通过他们的nameid属性。 这一措辞是有点混乱,所以这里谈到一个例子:

<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

然而,在这个示例中,存在称为“提交”形式的一个元件,这是提交按钮,其可与被访问document.forms.example.submit 。 它重写了前值,这是允许你提交表单的功能。

编辑:

如果重命名字段是对你不好,还有另一种解决方案。 不久写这之前,我留在网站上的问题,并得到了在一个整洁的JavaScript形式的黑客的响应:

function hack() {
  var form = document.createElement("form");
  var myForm = document.example;
  form.submit.apply(myForm);
}

请参阅如何可靠地提交HTML表单的JavaScript? 完整的细节



Answer 2:

鉴于您的形式同时具有idname定义的,你可以使用两者之一:

随着form标签的id

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

随着form标记的name属性:

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


Answer 3:

尝试这个:

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


Answer 4:

最有可能的罪魁祸首是IE的JavaScript混淆变量,ID和名称。 在源搜索的东西,分享你的表单的名称。



Answer 5:

  1. 将一个输入按钮的形式中。
  2. 它 - 给的tabindex = “1”。
  3. 使其不可见使用样式=“显示:无;”。

像这样

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


文章来源: Form not submitting with JS