我们知道,浏览器会保存其信息只有当表单提交,这意味着我们不能return false
或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>
Demo on JSfiddle (tested in IE9, Firefox, Chrome)
优点在目前接受的答案:
- 短代码;
- 没有jQuery;
- 没有加载服务器端页面;
- 没有额外的JavaScript;
- 无需额外的课程。
没有额外的JavaScript。您通常会附加处理程序到表单的submit
事件发送XHR和不取消它。
JavaScript示例
// for modern browsers with window.fetch
document.forms[0].addEventListener('submit', function() {
window.fetch('login.php', {
method: 'post',
body: new FormData(document.forms[0]))
}).then(function() { /* login completed */ })
// no return false!!
});
无JavaScript的支持
理想情况下,你应该让不支持JavaScript的形式工作太多,所以删除target
和设定的动作,将收到您的表单的页面数据。
<form action="login.php">
,然后简单地通过JavaScript添加它,当你添加submit
事件:
formElement.target = '';
formElement.action = 'about:blank';
不确定如果我正确理解问题。这是否意味着您将在浏览器中加载信息,以便javascript将使用三个输入框中的信息在一些预加载的数据中执行查找?我看到的一些自动完成实现使用Ajax加载结果。这不适合你的模型,是吗? – VKen 2013-03-19 22:14:43
在这里,尝试一个类似的问题提供的解决方案:http://stackoverflow.com/questions/8400269/browser-native-autocomplete-for-ajaxed-forms – sweetamylase 2013-03-19 22:23:30
@Ven我只是希望浏览器对待输入,就好像他们是已提交表单的一部分,因为用户将看到他们以前输入的值作为自动填充建议,而不实际提交表单。 – AmericanUmlaut 2013-03-20 07:36:38