javascript - FormData 缺少提交的值 - 获取它,也许没有 SubmitEvent.submitter?

标签 javascript html forms form-data

当我听<form>时的submit事件,并获取表单的FormData ,例如通过 XHR 提交,提交按钮的数据丢失:

<form>
  <input type="text" name="x" value="foo" />
  <input type="hidden" name="y" value="bar" />
  <button type="submit" name="submit1" value="bar">submit1</button>
  <input type="submit" name="submit2" value="submit2" />
</form>

FormData 将有 xy ,但都不是submit1也不submit2Try it in a Pen应该我希望它包含其中一个,即触发提交的那个 - 就像将发送到 action 的数据一样.

我可以做点什么onsubmit ,比如

form.onsubmit = function (evt) {
  var fd = new FormData(form);
  fd.append(evt.submitter.name, evt.submitter.value);
  // process fd...
});

但是SubmitEvent.submitter相当新,特别是在撰写本文时没有 IE,只有 Safari 的 TP。

有没有一种方法可以将提交提交到 FormData 中,而无需采取解决方法,例如监听所有表单输入的点击事件并使用其数据创建隐藏输入?


在接受答案后,我确实实现了“polyfill”:

document.querySelectorAll('form').forEach(function (form) {
  // query might miss <button>s without @type
  form.querySelectorAll('[type="submit"]').forEach(function (submit) {
    submit.addEventListener('click', function () {
      var input = document.createElement('input')
      input.setAttribute('type', 'hidden')
      input.setAttribute('name', this.name)
      input.setAttribute('value', this.value)
      this.form.appendChild(input)
    })
  })
})

最佳答案

Is there a way to get the submit into FormData without doing a workaround like listening to all the form's inputs' click events and creating, say, hidden inputs with their data?

没有。

SubmitEvent.submitter 是为了消除对单独点击事件的需要而添加的功能。

关于javascript - FormData 缺少提交的值 - 获取它,也许没有 SubmitEvent.submitter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70367392/

相关文章:

html - 可以在 input[type=range] 中指定不均匀的步骤吗?

ruby-on-rails-3 - 检测表单是否使用 ruby​​ on rails 提交?

javascript - 设置要在 JavaScript 中读取的文本文件?

javascript - 自执行函数和IIFE的区别

javascript - 使用 JS 在 HTML 中操作 SVG

html - CSS 显示 :inline with margin vs position:relative

javascript - 我可以 'observe' 组件的动态子项吗?

javascript - 无法访问 "filter"属性

javascript - 如何提交表单然后让浏览器返回到页面上的同一位置?

forms - Symfony 2 - 如何删除日期字段类型的默认日期选择器?