您需要牢记一些事项。
1. 有多种方式提交表单
- 使用提交按钮
- 按回车键
- 通过在 JavaScript 中触发提交事件
- 可能更多取决于设备或未来的设备。
因此,我们应该绑定到表单提交事件,而不是按钮单击事件。这将确保我们的代码现在和将来适用于所有设备和辅助技术。
2. Hijax
用户可能没有启用 JavaScript。一个hijax模式好这里,我们轻轻的使用JavaScript形式的控制,但离开它submittable如果JavaScript的失败。
我们应该从表单中提取 URL 和方法,因此如果 HTML 发生变化,我们不需要更新 JavaScript。
3. 不显眼的 JavaScript
使用event.preventDefault()而不是return false是一种很好的做法,因为它允许事件冒泡。这允许其他脚本与事件相关联,例如可能正在监视用户交互的分析脚本。
速度
理想情况下,我们应该使用外部脚本,而不是内联插入我们的脚本。我们可以使用脚本标签在页面的头部链接到它,或者在页面底部链接到它以加快速度。脚本应该悄悄地增强用户体验,而不是妨碍。
代码
假设您同意上述所有内容,并且想要捕获提交事件,并通过 AJAX(一种hijax 模式)处理它,您可以执行以下操作:
$(function() {
$('form.my_form').submit(function(event) {
event.preventDefault(); // Prevent the form from submitting via the browser
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
});
您可以使用以下内容通过 JavaScript 随时手动触发表单提交:
$(function() {
$('form.my_form').trigger('submit');
});
编辑:
我最近不得不这样做并最终编写了一个插件。
(function($) {
$.fn.autosubmit = function() {
this.submit(function(event) {
event.preventDefault();
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
return this;
}
})(jQuery)
将 data-autosubmit 属性添加到您的表单标签,然后您可以执行以下操作:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});