Jquery插件问题。如何返回值?

时间:2010-12-28 09:19:10

标签: jquery jquery-plugins

我为学习目的写了一个简单的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()事件,从而得到错误。但是如何将此值返回到插件外的变量?

如果可能,有人可以给我一个简短的示例代码来说明如何返回一个值,以及是否有更好的替代方案?

1 个答案:

答案 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实际上并不是必需的,但将当前节点作为上下文以及回调内容是一个很好的奖励。