2016-10-12 8 views
0

フォーム内の任意のアンカータグをクリックしてフォームを送信:Javascriptを:私は、フォームと多くのリンクを持っている

<form action="/a"> 
<input type=text name=somedata> 
<input type=submit> 

<a href="/b">my first link</a> 
<a href="/c">link</a> 
<a href="/d">link</a> 
<a href="/e">link</a> 
</form> 

をユーザー押すが提出した場合、フォームはいつものように、/に提出しなければならない(そう変化なし)。

somedataを廃棄して/ bに送信する代わりに、ユーザーが/ bをクリックすると、フォームが<form action=/b>のように/ bにPOSTリクエストを送信したいとします。

これは、ページ上のすべてのハイパーテキストアンカーで自動的に行うことができるので、/ bだけでなく、/ c、/ d、/ eでも機能しますか?

純粋なJavascriptとjQueryの両方を使用できます。選択<a>href

+0

あなたは何を試してみましたか? – stormec56

+0

いいえ、Javascript経由ですべてのアンカーにonClickイベントを追加する方法がわかりません – Robby75

+0

jQueryを使用している場合は、 'el.on(" click =、doFun();)と 'もし、古いJSをel.addEventListener( "click"、()=> doFun();) ' –

答えて

1

変更フォームのactionし、フォーム

$('form a').click(function(event){ 
    event.preventDefault(); 
    $(this).closest('form').attr('action', this.href).submit(); 
}); 
+0

私はこれを試しましたが、実際にアンカーからhrefに行きます(したがって、送信は機能するようです)。しかし、すべてのフォームデータは失われています。 (少なくとも$ _REQUESTには表示されません) – Robby75

+0

これはうまくいかない理由はありません...変更はアクションだけです。フォームにメソッドを設定しましたか? – charlietfl

+0

phpinfo()は私に問題を示しています:REQUEST_METHOD \t GET - しかし、私は次のように使います: '

' – Robby75

0

var form = document.querySelector("form"); 
 
var allA = document.querySelectorAll("a"); 
 

 
allA.forEach(function(el){ 
 
    
 
    el.addEventListener("click",function(e){ 
 
    form.submit(); 
 
    e.preventDefault();   
 
    }); 
 
    
 
}); 
 

 
form.addEventListener("submit",function(e){ 
 
    e.preventDefault(); 
 
    console.log("The form has been submit"); 
 
});
<form action="/a"> 
 
<input type=text name=somedata> 
 
<input type=submit> 
 

 
<a href="/b">my first link</a> 
 
<a href="/c">link</a> 
 
<a href="/d">link</a> 
 
<a href="/e">link</a> 
 
</form>

+0

とすると、それは速かった;-)しかし、これはまだ/ aにすべてを提出するだろう。あなたの答えを受け入れることができます。 – Robby75

+0

ああ申し訳ありませんが、 'a'をクリックすると'/b'のアクションに投稿されますか? –

+0

私はコードを更新して新しい回答を投稿するのを手伝ってくれます。 –

0

は、まず送信ボタンを削除し提出します。

$("#formId a").click(function(){ 
    var currentHref = $(this).attr("href"); 
    $("#formId").attr("action",currentHref); 
    $("#formId").submit(); 
}); 
1

var form = document.querySelector("form"); 
 
var allA = document.querySelectorAll("a"); 
 

 
allA.forEach(function(el){ 
 
    
 
    el.addEventListener("click",function(e){ 
 
    form.action = this.href; 
 
    console.log("Form action is been change to => " + this.href) 
 
    form.submit(); 
 
    e.preventDefault();   
 
    }); 
 
    
 
}); 
 

 
form.addEventListener("submit",function(e){ 
 
    e.preventDefault(); 
 
    console.log("The form has been submit"); 
 
});
<form action="/a"> 
 
<input type=text name=somedata> 
 
<input type=submit> 
 

 
<a href="/b">my first link</a> 
 
<a href="/c">link</a> 
 
<a href="/d">link</a> 
 
<a href="/e">link</a> 
 
</form>

関連する問題