如何通过单击链接使用JavaScript提交表单?


123

除了提交按钮外,我还有一个链接:

<form>

  <a href="#"> submit </a>

</form>

单击后可以提交表格吗?


我使用它来将完全隐藏的表单集成到页面中。但是链接前后都有换行符。它们来自表单元素吗?而且我想在新标签页/页面中打开链接,target="_blank"但似乎无法正常工作。
JPT

1
tl; dr <a role="button" aria-label="submit form" href="javascript:void(0)" onclick="document.querySelector('form').submit()">Submit</a>
Josh Habdas

Answers:


210

最好的方式

最好的方法是插入适当的输入标签:

<input type="submit" value="submit" />

最好的JS方式

<form id="form-id">
  <button id="your-id">submit</button>
</form>
var form = document.getElementById("form-id");

document.getElementById("your-id").addEventListener("click", function () {
  form.submit();
});

由封闭后的JavaScript代码DOMContentLoaded事件(只选择load向后兼容性)如果你还没有这样做:

window.addEventListener("DOMContentLoaded", function () {
  var form = document.... // copy the last code block!
});

简单而不可取的方式(先前的答案)

onclick属性添加到链接和id的表单中:

<form id="form-id">

  <a href="#" onclick="document.getElementById('form-id').submit();"> submit </a>

</form>

所有方式

无论选择哪种方式,formObject.submit()最终都可以调用(标记formObject的DOM对象在哪里<form>)。

您还必须绑定这样的事件处理程序,该事件处理程序调用formObject.submit(),以便在用户单击特定的链接或按钮时调用该事件处理程序。有两种方法:

  • 推荐:将事件侦听器绑定到DOM对象。

    // 1. Acquire a reference to our <form>.
    //    This can also be done by setting <form name="blub">:
    //       var form = document.forms.blub;
    
    var form = document.getElementById("form-id");
    
    
    // 2. Get a reference to our preferred element (link/button, see below) and
    //    add an event listener for the "click" event.
    document.getElementById("your-id").addEventListener("click", function () {
      form.submit();
    });
    
  • 不推荐:插入内联JavaScript。有几种原因导致不推荐使用此技术。一个主要的论点是将标记(HTML)与脚本(JS)混合在一起。代码变得杂乱无章,难以维护。

    <a href="#" onclick="document.getElementById('form-id').submit();">submit</a>
    
    <button onclick="document.getElementById('form-id').submit();">submit</button>
    

现在,我们要确定触发UI()调用的UI元素。

  1. 一个按钮

    <button>submit</button>
  2. 一条链接

    <a href="#">submit</a>

应用上述技术以添加事件侦听器。


我想应用此方法,但它似乎对我不起作用。这是一个小提琴,jsfiddle.net/rbhr9wt2
user1149244

@ user1149244在jsFiddle上的JavaScript窗格中,单击“ JavaScript”,然后将“加载类型”设置为“没有包裹-<body>”(或<head>)。默认情况下,它设置为“ onLoad”,此后DOMContentReady不再触发。
ComFreek

3
注意:如果您的形式有使用attr一个按钮name="submit"时,submit()您的窗体的方法将无法访问。
2540625 '11

为什么不建议使用onclick方法?
nu珠穆朗玛峰

@nueverest An <input type="submit">比说具有更多的语义含义<a href="#" onclick="...">。对于屏幕阅读器而言,这一点尤其重要。如果您必须使用后者,我建议您使用ARIA
ComFreek

65

如果您使用jQuery并需要一个内联解决方案,那么它将很好地工作;

<a href="#" onclick="$(this).closest('form').submit();">submit form</a>

另外,您可能需要更换

<a href="#">text</a>

<a href="javascript:void(0);">text</a>

因此,单击链接时用户不会滚动到页面顶部。


1
我认为最好在<span> text </ span>中创建它。它不是链接,并且href:javascript不好。(不久将成为坏旁边安全的原因...内联JavaScript是被禁止的一天。
Milche百通

我同意。从问题的性质来看,我选择了简单的答案。我个人所做的是使用href="#",然后使用jquery选择所有这些链接并e.preventDefault()click事件处理程序中调用,以便浏览器不会滚动。
莫里斯

3
我个人更喜欢这个答案。如果您的页面使用的是JQuery,则简洁,易于实现。也非常灵活,因为我的页面上有多种形式,并且可以完美地工作。
John Contarino

如果有人在onClick javascript调用的末尾添加“ return false”,则可以使用href =“#”
Lumis

23

您可以为表单和链接提供一些ID,然后订阅onclick链接和submit表单的事件:

<form id="myform" action="" method="POST">
    <a href="#" id="mylink"> submit </a>
</form>

然后:

window.onload = function() {
    document.getElementById('mylink').onclick = function() {
        document.getElementById('myform').submit();
        return false;
    };
};

我建议您使用提交按钮提交表单,因为它尊重标记语义,即使禁用了javascript的用户也可以使用。


4

HTML&CSS-没有Javascript解决方案

使您的按钮看起来像一个Bootstrap链接

HTML:

<form>
    <button class="btn-link">Submit</button>
</form>

CSS:

.btn-link {

    background: none;
    border: none;
    padding: 0px;
    color: #3097D1;
    font: inherit;

}

.btn-link:hover {

    color: #216a94;
    text-decoration: underline;

}

太好了,为什么要使它变得简单,却使其变得复杂。但是,我认为如果还添加“ cursor:pointer;”,看起来会更好。在悬停类中,因此光标变为手形。
Lumis

3

不需要任何特殊功能,效果很好。用php编写也容易得多。<input onclick="this.form.submit()"/>


通过单击链接而非输入元素说明OP 。
Rahil Wazir 2014年

可以通过做类似的事情来工作吗<input onclick="this.form.submit()"> Some Text</input>
CodyBugstein 2014年

2
<form id="mailajob" method="post" action="emailthijob.php">
    <input type="hidden" name="action" value="emailjob" />
    <input type="hidden" name="jid" value="<?php echo $jobid; ?>" />
</form>

<a class="emailjob" onclick="document.getElementById('mailajob').submit();">Email this job</a>

3
您能解释一下您的答案实际上是如何回答问题的吗?请为其添加更多上下文。

1
document.getElementById("theForm").submit();

就我而言,它非常完美。

您也可以在功能中使用它,

function submitForm()
{
     document.getElementById("theForm").submit();
} 

将“ theForm”设置为您的表单ID。完成。


0

这是您问题的最佳解决方案:在表单中,您具有以下代码:

<li><a href="#">Singup</a></li>
<button type="submit" id="haha"></button>

在CSS文件中,执行以下操作:

button{
  display: none;
}

在JS中,您可以这样做:

$("a").click(function(){
   $("button").trigger("click");
})

你去。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.