通常のリンクを使用してフォームを送信する


130

フォームを送信したいのですが。しかし、私は種類を提出して入力ボタンを使用しての基本的な方法が、つもりはありませんリンクを。

下の画像はその理由を示しています。画像リンクを使用してフォームを保存/送信しています。画像リンクに標準のcssマークアップを使用しているため、入力送信ボタンを使用したくありません。

onClick = "document.formName.submit()"をa要素に適用しようとしましたが、htmlメソッドを使用します。

代替テキスト

何か案は?


3
ボタンを使用してcssで画像を表示するか、JavaScriptを使用します。JavaScriptなしでフォームを送信する単純なhrefを作成する実際の方法はありません。
Anton S

2番目に、残念ながらこれらはJavaScriptを
使わ

4
これを行う理由は、誤った経済のように聞こえます。送信ボタン用の標準のcssを考え出し、フォームが使用されるように設計された方法でフォームを使用する方が良いでしょう。ボタンのCSSテクニックの山は、ここにあります説明されていますtripwiremagazine.com/2009/06/...
dnagirl

回答:


169

二つの方法。ボタンを作成し、CSSを使用したリンクのようにスタイルを設定するか、リンクを作成してを使用しますonclick="this.closest('form').submit();return false;"


55
:Aaaaaaaandここにリンクとしてどのようなスタイルにボタンの参照ですstackoverflow.com/questions/1367409/...
フリップチャート

3
form.submit()JavaScriptなしでは機能しないことに注意してください
baptx

3
@baptxは古いスマートフォンでもJavaScriptを有効にしました
Mahdi Jazini

2
@MahdiJazini多くの人がデフォルトでJavaScriptを無効にしており、煩わしく、場合によってはパフォーマンスに影響を与える可能性があります。JavaScriptが失敗すると、Webサイト全体が破損する可能性があります(たとえば、ローカルフォールバックなしのCDNを使用し、サードパーティドメインがブロックされます)。HTMLエラーがある場合でも、Webサイトを使用できます。代わりに、開発者はプログレッシブ拡張の原則に従う必要があります。
baptx

3
JavaScriptを使用しないユーザーをサポートする場合は、この回答で説明されている最初のオプションを実行し、ボタンをリンクのようにスタイルします。たとえばinput[type=submit].link { border: none; background: none; display: inline; color: blue; text-decoration: underline; }<input type=submit class="link" />
Jan Sverre

87

私の知る限りでは、なんらかの形のスクリプトがなければ、これを実際に行うことはできません。

<form id="my_form">
<!-- Your Form -->    
<a href="javascript:{}" onclick="document.getElementById('my_form').submit(); return false;">submit</a>
</form>

ここからの例。


1
そして親愛なる訪問者... >>> id = "my_form"を設定することを忘れないでくださいそれは名前ではありませんID:D
Mahdi Jazini

これが最善で明確な答えになるはずです、ありがとう!
yehanny

28

input type="submit"このようなものをスタイリングするだけでうまくいきました:

.link-button { 
     background: none;
     border: none;
     color: #0066ff;
     text-decoration: underline;
     cursor: pointer; 
}
<input type="submit" class="link-button" />

Chrome、IE 7-9、Firefoxでテスト済み


念のため、inputHTML要素にクラスをアタッチせずに、CSSセレクターを使用して適切な要素を選択する必要があります。
エリックカプルン2014

あなたのコメントが望ましい方法ですが、これは常に可能であるとは限りません
Serj Sagan '07

なぜそれが望ましい方法なのですか?
マーク

これは半ば確立されたコーディング慣行であり、通常はよりクリーンなhtmlを残します...しかし、それは
大した

1
この答えはjavascriptにも依存していません。これは、心配する必要が1つ少ない
Matthew Lock


5

使用する:

<input type="image" src=".."/>

または:

<button type="send"><img src=".."/> + any html code</button>

プラスCSS


0

確かに、リンク付きのフォームを送信する純粋なHTMLのソリューションはありません(a)タグを。標準HTMLはボタンまたは画像のみを受け入れます。他の共同編集者が言ったように、ボタンを使用してリンクの外観をシミュレートできますが、それは質問の目的ではないと思います。

私見、提案され承認されたソリューションは機能しないと思います。

フォームでテストしましたが、ブラウザがフォームへの参照を見つけられませんでした。

したがってthis、送信する必要があるフォームの子ノードであるクリックされる要素を参照するオブジェクトを使用して、JavaScriptの1行を使用してそれを解決することが可能です。だから、this.parentNodeフォームのノードがあります。呼び出した後submit()、そのフォームのメソッドをです。正しいフォームを見つけるために、ドキュメント全体を調査する必要はありません。

<form action="http://www.greatsolutions.com.br/indexint.htm"                   
   method="get">
    <h3> Enter your name</h3>
    First Name <input type="text"  name="fname"  size="30"><br>
    Last Name <input type="text" name="lname" size="30"><br>
    <a href="#" onclick="this.parentNode.submit();"> Submit here</a>
</form>

自分の名前で入力するとします。

記入済みフォーム

get送信後に読み込まれたページのURLで正しいパラメータを確認できるため、フォームメソッド属性で使用しました。

http://www.greatsolutions.com.br/indexint.htm?fname=Paulo&lname=Buchsbaum

このソリューションは明らかに、 onclickイベントまたは同様のイベント。

this と一緒にコンテキストを回復するための優れた選択肢です event直接使用するか、関数の引数として渡すことができる変数(すべての主要なブラウザーとIE9以降で利用可能)です。

この場合、イベントを開始した要素を示すapropertyを使用して、次の行でタグで行を置き換えtargetます。

<a href="#" onclick="event.target.parentNode.submit();"> Submit here</a>

@ネイサン、私はで書く習慣があまりありませんStackoverflow。あなたの修正が私のスタイルを改善するのに役立つことを願っています。私の英語も上手ではありません。
Paulo Buchsbaum 2017

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