Javascript jquery,绑定顺序/等待回调

Javascript jquery,绑定顺序/等待回调,javascript,jquery,binding,Javascript,Jquery,Binding,我编写了一个jquery插件来验证表单。它将自身绑定到$('element').Submit事件以触发验证(绑定在插件内部)。不知怎的,是这样的: // pseudocode jquery.rdy { $('form').validate(); //binding the plugin } 在validate插件内部,我将验证绑定到submit //pseudocode [...] $().submit(function () { validating... //retu

我编写了一个jquery插件来验证表单。它将自身绑定到$('element').Submit事件以触发验证(绑定在插件内部)。不知怎的,是这样的:

// pseudocode
jquery.rdy {
       $('form').validate(); //binding the plugin
}
在validate插件内部,我将验证绑定到submit

//pseudocode
[...]
$().submit(function () {
    validating... //returning true/false

    if (false) {
        return false //prevent submit form
    }
}
[...]
所以现在我的问题是,我如何将其他东西绑定到submit中(例如在其他js脚本中),但前提是验证已经完成

就这样

$('form').submit(function () {
    if (validate plugin was executed) {
        //do stuff like check if validation was returning a true and now do something else
    }
}
希望我的描述是正确的……我的英语不是最好的,但我尽量做到具体(我希望,伪代码也是一种正确的方法)

//编辑:使问题更具体: 我试图找出一种解决以下问题的方法:(这完全脱离了上下文,但问题就在那里。) 我有一个submit事件,它根据在另一个Decellation中触发的某些代码执行某些操作

$('element').submit(function () {
    if ($(this).hasClass('foo')) {
        // do something
    }
});

$('element').submit(function () {
    $(this).addClass('foo');
});

现在第一个函数什么都不做,因为它在第二个函数之前就被触发了。有没有一个干净的方法来解决这个问题。也许我需要一个超时事件(即使我讨厌它们)?

您可以使用自定义名称将更多函数绑定到表单元素

$('form').bind('after_validation',function(){ console.log('hello'); });
并在需要时在提交表单功能中触发它们:

$('form').trigger('after_validation');


更新:

如果不删除绑定的提交事件,则无法更改其顺序。请取消绑定(“提交”)并按正确顺序重新应用。你能做的就是使用自定义绑定(见上文),并在你需要的时候触发它们,比如。。在submit函数内部

$('form').submit(function () {
    //run validation
    $('form').trigger('validation');

    //did it pass validation?
    if($(this).data('invalid')){
        console.log('did not pass validation');
        return false;
    }

    //passed validation - submit the form
    return true;
});

//add validation to the "form"
$('form').bind('validation',function () {

    //do validation on form...

    if(false){
        $(this).data('invalid',true);
    }
});



//add another validator to the form, etc.
$('form').bind('validation',func...
我正在使用
.data()
将变量存储到“form”元素中,这样您就可以访问它们了

这是您需要的基础,可以应用于自定义jquery插件以形成自定义命名函数。例如,
$().validator()


如果您使用的是jQuery.Validate(看起来您使用的是.Validate()语法),那么只需调用isValid()方法即可:

那么可以

if ($('form').isValid()) { 

是的,我可以这样做,然后用我的插件验证表单。但我不想在那里核实。因为表单正在通过插件中的trigger form.submit函数进行验证。但关键是…插件的验证进度开始延迟。简单地说,我在提交时有两个绑定,但我想确保先验证插件,然后启动另一个。因此,我希望在第二个提交绑定中有一个if,以便在验证之前进行查找。嗯,用英语很难描述,但我希望你能理解我!是的,这会起作用,但是我需要在这个“验证后”函数中声明我的所有语句。我不想要这样的东西(想想js的调用函数)。我想要一个正常的提交事件来完成我的工作。但我只是想确保在完成某些工作时执行这个提交事件(在我的例子中,我的验证插件完成了他的工作)。因此,我可以使用我的插件向表单中添加一个“无效”类,并在第二个提交事件中检查它,如“if!hasclass(invalid)”,但这个if始终为真,因为表单没有无效原因插件执行到最晚不是我搜索的100%,而是我能找到的最佳答案,我可以解决问题。非常感谢。
if ($('form').isValid()) {