我们知道浏览器只有在提交表单时才会保存它的信息,这意味着我们不能用return false
or取消它e.preventDefault()
我们能做的是让它在不重新加载页面的情况下将数据提交到任何地方。我们可以做到这一点iframe
<iframe name="" style="display:none" src="about:blank"></iframe>
<form target="" action="about:blank">
<input name="user">
<input name="password" type="password">
<input value="Login" type="submit">
</form>
JSfiddle 上的演示(在 IE9、Firefox、Chrome 中测试)
目前接受的答案的优点:
- 更短的代码;
- 没有 jQuery;
- 没有加载服务器端页面;
- 没有额外的javascript;
- 不需要额外的课程。
没有额外的javascript。您通常将处理程序附加到submit
表单的事件以发送 XHR 并且不要取消它。
Javascript 示例
// for modern browsers with window.fetch
document.forms[0].addEventListener('submit', function (event) {
fetch('login.php', {
method: 'post',
body: new FormData(event.target))
}).then(r => r.text()).then(() => { /* login completed */ })
// no return false!!
});
无 JavaScript 支持
理想情况下,您也应该让表单在没有 javascript 的情况下工作,因此删除target
并将操作设置为将接收您的表单数据的页面。
<form action="login.php">
然后在添加事件时通过 javascript 添加它submit
:
formElement.target = '';
formElement.action = 'about:blank';