我编写了一个验证表单的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()
.