2009-06-24 47 views
5

提交我有世界上最简单的JavaScript功能:它是由被称为形式不是JS

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

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

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

“document.formname.submit is not a function”

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

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

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

+0

作为一个变通我做了以下内容: 只是显示打印按钮,调用打印方法,一旦用户已经做到了这一点,然后我告诉提交按钮(<输入类型=“提交”id =“btnSubmit”/>)及其所有的好。 – 2009-06-24 16:53:42

回答

27

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

现在,更深入的了解。一般情况下,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?表单内

5

试试这个:

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

我绝对知道这*应该*工作,但由于某种原因,它只是显示打印对话框,并没有去哪里。 – 2009-06-24 16:22:27

+0

然后你的问题在你的代码中的其他地方。很可能是一个永远不会关闭的HTML标记。 – 2009-06-24 16:25:09

+0

不幸的是,它完全通过验证,所以我不认为这是一个标记问题? – 2009-06-24 16:35:55

6

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

随着form标签的id

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

随着form标签的name属性:

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

最有可能的罪魁祸首是IE混淆了JavaScript变量,ID和名称。在源代码中搜索与您的表单名称相同的内容。

0
  1. 将一个输入按钮。
  2. 给它tabindex =“ - 1”。
  3. 使用style =“display:none;”使其不可见。

喜欢这个

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