はじめに
formで設定された action
とは別の action(formaction
) が設定された submit
ボタンがある中で、クリックされた送信ボタンの formaction
を取得したい。
<form method="post" name="sample" action="/main-submit">
<button type="submit" name="B" formaction="/sub-submit">これを取得したい(別の送信ボタン)</button>
<button type="submit" name="A">送信</button>
</form>
<button name="C" type="button">フォーム外の送信ではないボタン</button>
activeElement
プロパティを使うと取得できる
こちらの回答では、 activeElement
プロパティを使ってクリックされたボタンを特定してから formaction
を取得している。
この場合 name="B"
のボタンをクリックするとその formaction
が取得される。 form
の submit
ボタンをクリックすると元々設定された action
が取得される。
javascript - How to get formaction in submit event? - Stack Overflow
https://stackoverflow.com/a/51990326
$("form").submit(function(e) {
let formAction = e.target.getAttribute("action");
let activeElementAction = document.activeElement.getAttribute("formaction");
let action = activeElementAction || formAction;
console.log(action);
e.preventDefault();
});
// この方法でも可
$("button").on('click', function(e) {
let activeElementName = document.activeElement.getAttribute("name");
console.log('activeElement name: ' + activeElementName);
});
また、下記ドキュメントの通り activeElement
は「DOM内で現在フォーカスを持っている要素」としているので、ボタンがクリックされたイベントでクリックされたボタンを特定することも可能。
Document: activeElement プロパティ - Web API | MDN
https://developer.mozilla.org/ja/docs/Web/API/Document/activeElement
サンプル
https://codepen.io/ysd-marrrr/pen/PoLeoop
送信実行時に form
の action
を取得すると元の action
が取得される(失敗)
こちらは name="B"
のボタンをクリックしても form
に設定された formaction
(/main-submit
)が取得される。
javascript - get action of submitted form - Stack Overflow
https://stackoverflow.com/questions/16087018/get-action-of-submitted-form
$("form").submit(function() {
//some stuff...
//get form action:
var formAction = $(this).attr("action");
//some other stuff...
});