我为学习目的写了一个简单的jquery验证插件,它运行正常。但我是新手,并且不知道如何从插件中返回一个值。
(function($){
$.fn.bluevalidate = function(options){
var defaults = {
errorMsg : 'You have an error',
required : false,
no_space : false,
no_special_chars : false,
numbersOnly : false,
max_chars : 0,
min_chars : 0,
matchWith : '',
matchMsg : 'Please retype the same value',
email : false
};
var opt = $.extend(defaults,options);
return this.each(function(index,element){
var e = $(element);
var p = e.parents('span:eq(0)');
var msg = [];
e.focus(function(){
msg = [];
});
//-------------------------------------------------------------------------------
//Handle required
if(opt.required==true)
{
e.blur(function(evt){
if(e.val()=='')
{
e.css('background','#ffcccc');
msg.push('This field is required.');
}
else
{
e.css('background','#ffffff');
}
displayMsg();
});
}
....
....
..
基本上我需要找出表单上的错误数量。所以我想我会写一个函数来触发所有字段上的blur()事件,从而得到错误。但是如何将此值返回到插件外的变量?
如果可能,有人可以给我一个简短的示例代码来说明如何返回一个值,以及是否有更好的替代方案?
答案 0 :(得分:4)
由于每个jQuery插件都应该返回一组包装的jQuery对象(以保持链存活),你不能(实际上你可以,但你不应该)使用return;
返回任何值
由于您正确返回了jQuery包装集,因此可以调用回调函数来处理实际返回的值。您的选项对象是一个完美的地方:
$('element').bluevalidate({
/* some flags */
callback: function(value) {
// do something with value
}
});
您可以在插件函数中的任何位置调用该回调。假设您想对变量p
执行某些操作,它看起来像:
if( typeof options.callback === 'function' )
options.callback.apply(this, [p]);
这会调用你的回调函数并传递变量。 this
实际上并不是必需的,但将当前节点作为上下文以及回调内容是一个很好的奖励。