有人能指出我正确的方向吗?我使用Tools作为验证器,但是想要执行我只有所有验证通过的ajax提交函数。我在这里有一个有效的验证脚本,以及一个有效的ajax调用;但是我有时间想弄清楚如何让他们一起工作。
我该怎么做?
$(document).ready(function() {
$("#leadbanker_intake_form").validator({
position: 'center right',
offset: [0, 0],
message: '<div><em/></div>'
}).bind("onSuccess", function(e, els) {
// FUNCTION HERE still works even though some forms haven't validated
}
});
答案 0 :(得分:2)
第二个参数是一个jQuery对象,其中包含通过验证的所有字段。
因此,在您的onSuccess
回调中,您只需要检查length
els
(第二个参数),并确保它等于您所在的字段总数验证的。
我认为这应该有用(但我没有测试过):
$(document).ready(function() {
$("#leadbanker_intake_form").validator({
position: 'center right',
offset: [0, 0],
message: '<div><em/></div>'
}).bind("onSuccess", function(e, els) {
var numSucceeded = els.length,
numExpected = $(this).data('validator').getInputs().length;
if (numSucceeded === numExpected) {
// get your Ajax on
}
}
});
编辑:在下面的评论中,您说如果您使用此代码:
$(document).ready(function() {
$("#leadbanker_intake_form").validator({
position: 'center right',
offset: [0, 0],
message: '<div><em/></div>'
}).bind("onSuccess", function(e, els) {
var numSucceeded = els.length,
numExpected = $(this).data('validator').getInputs().length;
if (numSucceeded === numExpected) {
$("#leadbanker_intake_form").submit(function() {}
}
}
});
然后代码似乎被忽略了。我发现有两个问题。
首先,该代码在语法上是不正确的 - 你错过了两个紧密的问题(你问题上的代码已经缺少一个,我忘了添加一个)。要修复语法,该代码应为:
$(document).ready(function() {
$("#leadbanker_intake_form").validator({
position: 'center right',
offset: [0, 0],
message: '<div><em/></div>'
}).bind("onSuccess", function(e, els) {
var numSucceeded = els.length,
numExpected = $(this).data('validator').getInputs().length;
if (numSucceeded === numExpected) {
$("#leadbanker_intake_form").submit(function() {}); // <-- here
}
}); // <-- and here
});
请注意您错过的分号。我不确定这些语法错误是否存在于您尝试运行的实际代码中,或者如果这是您的转录错误,但它肯定是一个严重的语法错误来打破整个事情。
另一个问题是.submit(...)
调用绑定提交侦听器,如果表单已验证。但是 - 我不确定这一部分 - 在绑定submit
处理程序时,您的表单可能已经提交。该问题的解决方案是将侦听器绑定到onSuccess
回调之外。关于这个的另一种可能性(我真的需要阅读jQuery TOOLS文档...)是你需要手动提交表单 - 也就是说,你可能成功绑定了处理程序,但是表单从未实际提交过!
如果不查看TOOLS文档,我也真的不能说更多,也许你的实际代码也是如此。如果此修改中的建议无法解决问题,您是否介意发布可再现问题的jsfiddle或jsbin?