自己封装一个jquery插件

首先对 . e x t e n d .data两个函数解释
. e x t e n d 使 .extend({},param1 ,param2);
这时得到的数据为param1继承param2的数据,如果param1有的数据param2中也有param2就会覆盖param1中相同的数据,所以两个参数的顺序不能乱。
. d a t a .data("选择器","属性名称",{键:值})或者 ( ) . d a t a ( n a m e , v a l u e ) .data("选择器","属性名称").键名称, ( ) . d a t a ( n a m e ) , (“选择器”).data()获取所有值
以一个由后台获取数据组装成的下拉框为例

(function($){
    /**定义函数,jquery插件调用函数*/
    $.fn.select=function(options,param){
        if(typeof options == "string"){
            var method = $.fn.select.methods[options];
            if(method){ return method(this,param); }
        } 
    }
    /**定义函数事件*/
    $.fn.select.methods={
        onLoadSuccess: function(){},
        onSelect: function(record){},
        loadData: function(jq, data){
            return jq.each(function(){ loadData(this, data); });
        },
        reload: function(jq, ajax){
            return jq.each(function(){ request(this, ajax); });
        },
        setValue: function(jq, value){
            return jq.each(function(){ setValue(this, value); });
        }
    }
    /**函数默认属性及事件*/
    $.fn.select3.defaults = {
        id: null,
        disabled: false,
        //url:base_url+'/select/getSelectProj',
        dataType:'json',
        type:'GET',
        //contentType:'application/json',
        valueField: 'uuid',
        textField: 'name',
        onLoadSuccess: function(data){},// 加载成功时触发的事件
        onLoadError: function(err){},
        onSelect:function(row){}// 选中时触发的事件
    };
        /**请求数据*/
    function request(target, options){
        var opts = $.data(target, 'select3').options;
        if (options.url){
            opts = $.extend(opts, options);
        }else{
            return;
        }
        $.ajax({ url : opts.url, type : opts.type, data : opts.param, //dataType : opts.dataType, contentType : opts.contentType, success:function(data){ loadData(target, data); }, error:function(){ opts.onLoadError.apply(this, arguments); } })
    };
    /**加载数据*/
    function loadData(target, data){
        var rows = data.rows;
        var opts = $.data(target, 'select3').options;
        $(target).empty();
        for(var i=0,j=rows.length; i<j; i++){
            var item = $('<option></option>').appendTo(target);
            item.attr('value', rows[i][opts.valueField]);
            item.html(rows[i][opts.textField]);
        }

        opts.onLoadSuccess.call(target, data);// 回调成功加载事件方法
        $(target).change(function(){ var itemValue = $(this).children('option:selected').val(); for(var i=0,j=rows.length; i<j; i++){ if (rows[i][opts.valueField] == itemValue){ opts.onSelect.call(target, rows[i]); return; } } }); }; /**设置值*/ function setValue(target, value){ var opts = $.data(target, 'select3').options; $(target).val(value); }; })(jQuery)

引用插件
首先引入插件,再初始化

<script src="select.js"></script>
<script language="javascript">
    // 初始化
    $("#id").select({
        url:,
        onLoadSuccess:function(){
        }
    });
    // 调用指定函数
    $("#id").("reload",{参数});
</script>

猜你喜欢

转载自blog.csdn.net/junhua_xu/article/details/80167022