让它起作用
在使用 javascript 做任何事情之前,请先制作一个正常的表单。即使用您想要的任何服务器端语言生成表单,并且当您提交表单时,它应该执行您希望它执行的操作。如果您有一个没有 javascript 的表单,那么您有信心在 js 中断时它总是可以工作。
让它更好地工作/渐进式增强
您的 js 似乎有 2 或 3 个要求 - 单独对待它们:
1. 表单应该一次只显示一个输入
例如,像这样的标记:
<form id="myForm" method="post">
<legend>My Awesome Form</legend>
<div class="question">
<label for="x">X</label>
<input name="x" id="x">
</div>
<div class="question">
<label for="y">Y</label>
<input name="y" id="y">
</div>
<div class="question">
<label for="z">Z</label>
<input name="z" id="z">
</div>
<div class="submit"><input type="submit" value="Submit"></div>
</form>
像这样使用一些js:
$('.question', '#myForm').not(':first-child').hide();
$('input', '#myForm').change() {
var div, next;
div = $(this).parent();
next = div.next();
if ($(this).val() && next.length) {
parent.hide();
next.show();
}
});
一次只显示一个问题 div,并在填充输入时显示下一个(如果有下一个)。
2. 验证用户输入
要验证用户输入,请创建一个为您执行此操作的函数,根据需要返回 true/false 并将其挂钩到您的 js 中,以便在输入值被视为无效时它不会继续:
validate(field, input) {
var valid = false;
// implement your logic here to validate input
if (valid) {
return true
}
return false;
}
$('input', '#myForm').change() {
var div, next;
if (!validate($('this').attr('name'), $(this).val()) {
return;
}
div = $(this).parent();
next = div.next();
if ($(this).val() && next.length) {
parent.hide();
next.show();
}
});
如果当前输入的值无效,这将阻止用户进入下一个输入。
3.通过ajax提交表单
单击提交应该将表单数据发送到服务器,以(几乎)与正常提交表单相同的方式。唯一的区别应该是它使用您解析的 json 响应或您在页面末尾转储的 html 片段进行响应:
$('#myForm').submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: $(this).serialize(),
success: function(data, textStatus, jqXHR) {
// handle success response
},
error: function(jqXHR, textStatus, errorThrown)) {
// show the user an error
}
});
});
这里写的所有 js 都是未经测试的,它应该给你一些关于如何处理你想做的事情的各个方面的想法——当然,有关任何特定方法的更多信息,请参阅文档。