Jquery,绑定顺序/等待回调

jquery, binding order/wait for callback

本文关键字:等待 回调 定顺序 绑定 Jquery      更新时间:2023-09-26

我编写了一个验证表单的jquery插件。它将自己绑定到$('element')。提交事件以触发验证(绑定在插件内部)。像这样:

// pseudocode
jquery.rdy {
       $('form').validate(); //binding the plugin
}
在validate插件内部,我将验证绑定到submit
//pseudocode
[...]
$().submit(function () {
    validating... //returning true/false
    if (false) {
        return false //prevent submit form
    }
}
[...]

所以现在我的问题是我如何绑定(在其他js脚本中例如)其他东西提交,但只是如果验证完成。

so like this

$('form').submit(function () {
    if (validate plugin was executed) {
        //do stuff like check if validation was returning a true and now do something else
    }
}

希望我描述对了…我的英语不是最好的,但我尽可能具体(我希望,伪代码也是一种正确的方法)

//编辑:使问题更具体:我正试图找出一种方法来解决以下问题:(它非常脱离上下文,但问题就在那里…)我有一个提交事件,它正在做一些事情取决于一些代码触发在另一个声明。

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

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

如果您正在使用jQuery。验证(看起来像是使用.validate()语法),您可以调用isValid()方法:

if (validate plugin was executed) { 

可以是

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

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

$('form').bind('after_validation',function(){ console.log('hello'); });

并在需要时在提交表单函数中触发它们:

$('form').trigger('after_validation');
http://api.jquery.com/trigger/


更新:

如果不删除绑定提交事件.unbind('submit')并以正确的顺序重新应用,则无法更改绑定提交事件的顺序。你能做的就是使用自定义绑定(见上文),并在你需要的时候触发它们——就像…在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() .

http://docs.jquery.com/Plugins/Authoring