我有一个使用 jquery 和 servlet 的简单表单。jquery 对 servlet 进行 ajax 调用,servlet 进行一些服务器端计算,然后通过 jQuery 在同一页面上显示结果。我不希望表单执行默认提交(并转到 servlet),因为我想留在同一页面上并动态显示结果。它完全按照我想要的方式工作:
HTML:
<form name="form1" action="FormHandler1" method="POST" class="stats-form">
<input class="stats-input" id="number0" type="text" name="number0">
<input id="number1" type="text" name="number1">
<input id="number2" type="text" name="number2">
<input id="number3" type="text" name="number3">
<input type="submit" value="Calculate" class="calculate-stats" name="stats-submit">
</form>
jQuery:
form.submit (function(event) {
$.ajax({
type: form.attr("method"), // use method specified in form attributes
url: form.attr("action"), // use action specified in form attributes (servlet)
data: form.serialize(), // encodes set of form elements as string for submission
success: function(data) {
// get response form servlet and display on page via jquery
}
});
event.preventDefault(); // stop form from redirecting to java servlet page
});
现在,我想添加表单验证,因为 servlet 需要十进制数字来进行计算。应该只允许用户输入数字,不能输入其他字符。为此,我采用了流行的jQuery Validation插件。
验证按预期工作,但要对 servlet 进行 ajax 调用,我必须使用 jQuery Validation 提供的 submitHandler,而不是上面显示的 jQuery 提交方法。当我使用验证 submitHandler 时,执行提交时表单的默认操作,转到 servlet 页面而不是停留在同一页面上,以便在 jQuery 中动态显示我的结果。我必须向 formHandler 传递一个表单,而不是像以前那样的事件,这使我能够阻止默认操作。唯一的选择是返回 false,但它不起作用。在过去的两天里,我一直在努力解决这个问题,并且几乎用尽了我的 google-fu。这是让我悲伤的新代码:
form.validate({
rules: {
number0: ruleSet,
number1: ruleSet,
number2: ruleSet,
number3: ruleSet,
},
submitHandler: function (form) {
$.ajax({
type: "POST",
url: form.attr("action"),
data: form.serialize(),
success: function () {
// get response from servlet and display on page via jQuery
}
});
return false; // required to block normal submit ajax used
}
});
任何帮助将不胜感激,我想使用这个简洁的 jQuery 表单验证,但我可能只是从头开始编写自己的 jQuery 验证,以便我可以使用我已经工作的表单提交方法。