リンクをクリックしてJavaScriptを含むフォームを送信する方法


123

送信ボタンの代わりに私はリンクを持っています:

<form>

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

</form>

クリック時にフォームを送信させることはできますか?


これを使用して、完全に非表示のフォームをページに統合します。ただし、リンクの前後に改行があります。それらはフォーム要素からのものですか?そして、新しいタブ/ページでリンクを開きたいのtarget="_blank"ですが、うまくいかないようです。
JPT、2015年

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

回答:


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()最終的には呼び出します(タグのformObjectDOMオブジェクトはどこですか<form>)。

また、このようなイベントハンドラーをバインドして、を呼び出すformObject.submit()必要があります。これにより、ユーザーが特定のリンクまたはボタンをクリックしたときに呼び出されます。2つの方法があります。

  • 推奨:イベントリスナーを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を挿入します。この手法が推奨されない理由はいくつかあります。主要な議論の1つは、マークアップ(HTML)とスクリプト(JS)を混在させることです。コードは整理されておらず、保守が困難になります。

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

これで、submit()コールをトリガーするUI要素を決定する必要があるポイントに到達しました。

  1. ボタン

    <button>submit</button>
  2. リンク

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

イベントリスナーを追加するには、前述の手法を適用します。


これを適用したかったのですが、私の側ではうまくいかないようです。ここでフィドル、だjsfiddle.net/rbhr9wt2
user1149244

@ user1149244 jsFiddleのJavaScriptペインで[JavaScript]をクリックし、[読み込みタイプ]を[折り返しなし-<body>](または<head>)に設定します。デフォルトでは "onLoad"に設定されており、その後はDOMContentReadyは起動しません。
ComFreek 2016

3
注:フォームにattr付きのボタンがある場合、フォームname="submit"submit()メソッドにはアクセスできません。
2540625

onclickメソッドが推奨されないのはなぜですか?
nu everest

@nueverest An <input type="submit">は、たとえば、より意味的な意味があります<a href="#" onclick="...">。これは、スクリーンリーダーに関して特に重要です。後者を使用する必要がある場合は、ARIAを使用することをお勧めします。
ComFreek 2017

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>テキスト</ span>で作成することが望ましいと思います。これはリンクではなく、href:javascriptは適切ではありません。(すぐに次のセキュリティ上の理由で悪くなるために...インライン化はJavaScriptがいつかを禁止することがある。
Milche摂餌

同意する。質問の性質から判断して、私は単純な答えを求めました。私が個人的に行うことはhref="#"、jqueryを使用してこれらのリンクをすべて選択e.preventDefault()し、clickイベントハンドラーで呼び出して、ブラウザーがスクロールしないようにすることです。
モーリス

3
私は個人的にこの答えを好みます。ページがJQueryを使用している場合、シンプルでクリーンで実装が簡単です。複数のフォームを持つページがあり、完璧に機能するので、非常に柔軟性もあります。
John Contarino、

onClick javascript呼び出しの最後に「return false」を追加すると、href = "#"を使用できます
Lumis '31年

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ソリューションなし

ボタンをブートストラップリンクのように表示する

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

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");
})

どうぞ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.