在 HTML/JavaScript 中,我如何通过一个按钮提交多个帖子,从而导致在新选项卡上打开一个新页面

In HTML/JavaScript how do I submit multiple posts from one button, leading a to a new page being opened on a new tab

如何通过来自单个 form/button

的 post 请求提交打开的多个页面

目前我有一个 table,每一行代表一位歌曲艺术家和一首歌曲,每一行都有一个 Unlink 按钮,它使用一个表单来提交post 对服务器的操作会导致在新选项卡上打开新页面,这很好

<form target="_blank" action="https://acoustid.org/edit/toggle-track-mbid" method="POST">
  <input name="state" value="1" hidden="">
  <input name="track_id" value="9509889" hidden="">
  <input name="mbid" value="6573f01d-0df5-442d-90c3-a69783c217c3" hidden="">
  <input type="submit" value="Unlink">
</form>

我还想做的是有一个 Unlink All by Artist 按钮,它会找到与单击的行具有相同艺术家的所有行,然后提交每个 post 请求。

所以我可以使用 getElementsByName() 找到行,我的困难是我不明白只提交多个 posts,每个 post 导致在新选项卡中打开新页面。

我假设我的 JavaScript 用于 UnlinklllByArtist 会找到所需的行,然后为每一行调用另一个 JavaScript 函数来提交 post 但我该怎么做这第二部分。

您可以触发多次按钮点击/单击一次按钮提交,但我的浏览器最初不允许网站打开多个选项卡。我收到一条消息,标签页/弹出窗口被阻止。我可以选择允许此操作。

document.querySelector('button').addEventListener('click', () => {
  const forms = document.querySelectorAll('form');
  forms[0].submit();
  forms[1].submit();
});
<form target="_blank" action="https://acoustid.org/edit/toggle-track-mbid" method="POST">
  <input name="state" value="1" hidden="">
  <input name="track_id" value="9509889" hidden="">
  <input name="mbid" value="6573f01d-0df5-442d-90c3-a69783c217c3" hidden="">
  <input type="submit" value="Unlink">
</form>
<form target="_blank" action="https://acoustid.org/edit/toggle-track-mbid" method="POST">
  <input name="state" value="1" hidden="">
  <input name="track_id" value="9509889" hidden="">
  <input name="mbid" value="6573f01d-0df5-442d-90c3-a69783c217c3" hidden="">
  <input type="submit" value="Unlink">
</form>
<button>
  Unlink All
</button>

我找到了使用 GreaseMonkey

的解决方案

这会找到每个表单,然后依次提交到同一个选项卡,每次提交之间会有延迟

// ==UserScript==
// @name     AlbunackSubmitBadAcoustidsLinksOnPage
// @version  1
// @grant    none
// @include  http://reports.albunack.net/new_acoustid_report10_1.html
// ==/UserScript==
function delayedOpenLink(form)
{
    form.submit();  
}

function check()
{
  var forms = document.getElementsByTagName("form");
  var i=1;
  for(form of forms)
  {
    setTimeout(delayedOpenLink, 5000 * i, form);
    i++;    
  }
}

if (confirm("SubmitAcoustIds") == true) 
{
  check();
}