我已经看了这个问题和这个问题,但使用<button>
标签的解决方案对我不起作用。
我想这是因为我使用的是FormData
,但我认为FormData
会获取所有提交的键和值。
这里有一个简单的JSFiddle来说明我想做的事情,但它不起作用。我希望看到first
和second
值显示在FormData对象中,但只显示input-data
。
我需要能够确定按下了哪个按钮来提交表格。
function handleSubmit(event) {
event.preventDefault(); // don't have the browser refresh on submit
const formData = new FormData(event.target);
for (var pair of formData.entries()) {
console.log(pair[0]+ ' ==> ' + pair[1]);
}
}
const form = document.getElementById('form');
form.addEventListener('submit', handleSubmit);
<form id="form">
<input name="input-data"/>
<button type="submit" name="action" value="first">Submit</button>
<button type="submit" name="action" value="second">Another Submit</button>
</form>
FormData不收集按钮的值。您可以设置隐藏输入的值,如下所示:
function handleSubmit(event) {
event.preventDefault(); // don't have the browser refresh on submit
document.getElementById('action').value = event.submitter.value;
const formData = new FormData(event.target);
for (var pair of formData.entries()) {
console.log(pair[0]+ ' ==> ' + pair[1]);
}
}
const form = document.getElementById('form');
form.addEventListener('submit', handleSubmit);
<form id="form">
<input name="input-data"/>
<input type="hidden" name="action" id="action" value=""/>
<button type="submit" name="action" value="first">Submit</button>
<button type="submit" name="action" value="second">Another Submit</button>
</form>
跨浏览器解决方案
function handleSubmit(event) {
const formData = new FormData();
formData.append("input-data", document.getElementById("input-data").value)
formData.append(event.name, event.value);
for (var entry of formData) {
console.log(entry[0] + ' => ' + entry[1]);
}
}
<form id="form">
<input id="input-data"/>
<button type="button" name="action" value="first" onclick="handleSubmit(this)">Submit</button>
<button type="button" name="action2" value="second" onclick="handleSubmit(this)">Another Submit</button>
</form>
我不认为这可以使用FormData,
你必须自己编码,类似于
const MyForm = document.getElementById('my-form')
var lastClick = null
MyForm.onclick=evt=>
{
lastClick = evt.target.matches('button[type=submit]')
? evt.target.name
: null
}
MyForm.onsubmit=evt=>
{
evt.preventDefault()
console.clear()
console.log ( 'submit by', lastClick)
let formData = new FormData(MyForm);
for (let pair of formData.entries())
{
console.log(pair[0],' ==> ',pair[1])
}
}
<form id="my-form">
<input name="input-data"/>
<button type="submit" name="first">Submit</button>
<button type="submit" name="second">Another Submit</button>
</form>