代码之家  ›  专栏  ›  技术社区  ›  niczak

不与JS一起提交的表单

  •  6
  • niczak  · 技术社区  · 15 年前

    我有世界上最简单的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 回复  |  直到 12 年前
        1
  •  28
  •   Community Nick Dandoulakis    7 年前

    简而言之:改变 身份证件 你的提交按钮与“提交”不同。另外,不要设置 名称 也就是这个值。

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

    这是因为表单的元素可以作为其DOM节点的属性,通过它们 name id 属性。这个措词有点混乱,下面是一个例子:

    <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”,这是一个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? 有关完整的详细信息

        2
  •  6
  •   artlung    15 年前

    鉴于你的表格中有 id 和A name 定义,您可以使用以下任一项:

    form 泰格 身份证件 :

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

    形式 泰格 名称 属性:

    document.forms['formname'].submit();
    
        3
  •  5
  •   Spencer Ruport    15 年前

    试试这个:

    fnSubmit()
    {
      window.print();
      document.getElementById("formname").submit();
    }
    
        4
  •  0
  •   wombleton    15 年前

    最可能的罪魁祸首就是混淆了javascript变量、ID和名称。在源中搜索共享表单名称的内容。

        5
  •  0
  •   dldnh Michael    12 年前
    1. 在表单中放置一个输入按钮。
    2. 在上面给出tabindex=“-1”。
    3. 使用style=“display:none;”使其不可见。

    这样地

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