jquery工具.onSuccess

时间:2010-10-07 19:47:49

标签: jquery

有人能指出我正确的方向吗?我使用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
    }
});

1 个答案:

答案 0 :(得分:2)

根据the documentation

  

第二个参数是一个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文档,我也真的不能说更多,也许你的实际代码也是如此。如果此修改中的建议无法解决问题,您是否介意发布可再现问题的jsfiddlejsbin