2011-12-18 44 views
2

我写了一个用于验证表单的jquery插件。它将自身绑定到$('element')。提交事件来触发验证(绑定在插件内部)。不知怎的,像这样:jquery,绑定次序/等待回调

// pseudocode 
jquery.rdy { 
     $('form').validate(); //binding the plugin 
} 

里面的验证插件的我绑定验证,以提交

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

    if (false) { 
     return false //prevent submit form 
    } 
} 
[...] 

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

所以这样

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

希望我descriped是正确的......我的英语不是最好的,但我tryed是混凝土S可能的(我希望,伪代码是一个正确的方法为好)

//编辑:使问题更具体: 我试图弄清楚一种方法来解决以下问题:(它非常出于上下文,但问题恰恰在那里) 我有一个提交事件,这取决于在另一个decleration中触发的某些代码。

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

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

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

回答

0

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

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

,并引发他们在你提交表单功能,当你需要它:

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

​​


更新:

你不能查请按照您绑定的提交事件的顺序,而不删除它们并按照正确的顺序重新应用.unbind('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()存储变量对“形式”元素,以便您可以访问它们环比下滑。

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

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

+0

是这会工作,但后来我需要做的声明我在这一切的声明“经过验证“功能。我不想要那样的东西(想起js的调用函数)。 我想要一个正常的提交事件做我的东西。但只是我想确定这个提交事件是在一些东西完成时执行的(在我的情况下,我的确认插件完成了他的工作)。所以我可以做一些事情,比如向我的插件添加一个“无效”类到表单中,并在第二次提交事件中检查它,例如“if!hasclass(invalid)”,但是如果总是为true,因为表单不具有无效原因,插件被执行到晚期 – user1104419 2011-12-18 15:59:22

+0

我编辑了我的问题,使其更容易理解 – user1104419 2011-12-18 16:22:32

+0

请参阅上面的更新 – 2011-12-20 09:40:57

1

如果您正在使用jQuery.Validate(它看起来像你同在。验证()语法),你可以调用isValid()的方法:

if (validate plugin was executed) { 

然后可以

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

是的,我可以做这样的事情来验证表单,然后用我的插件。但我不想在那里验证。因为表单无论如何都得到了验证,因为它应该通过插件内的触发器form.submit函数进行验证。但重点是......通过插件的验证过程开始迟到。简单地说 - 我有两个绑定提交,但我想确保验证插件是第一次然后其他开始。所以我想有一个如果第二次提交内部绑定查找,如果验证之前完成。嗯很难用英文描述,但我希望你能找到我! – user1104419 2011-12-18 15:47:50

+0

我编辑了我的问题,使其更容易理解 – user1104419 2011-12-18 16:22:42