自己做jQuery开源插件之一:三级联动插件

本文介绍如何使用jQuery自定义一个省市区三级联动插件,包括插件的实现思路、核心代码及测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从毕业到现在,大大小小的项目做了不少,基本上都是做的web,记得刚参加工作的时候对前端技术不怎么了解,还是以拖服务器控件为主,几乎不考虑用户体验,后来随着工作经验的不断积累,对前端技术逐渐开始感兴趣,并且不断深入学习,到现在完全痴迷于jquery,以至于现在做项目整个做下来看不到一个服务器端控件,全部都是客户端控件搭配jquery完成数据的获取、展示和提交。最近这一年对写jQuery插件特别感兴趣,总觉得自己封装的jQuery插件就是好用,看着公司很多个项目都用上了自己的插件,心里很有成就感,下面我就花一段时间整理一下我写过的各种jQuery插件,这一系列的文章适合熟悉jQuery语法的开发者阅读,初学者可能看得会比较吃力,我也不会一句一句的讲解代码,好了,废话不多说了,欢迎大家一起讨论和学习。      

今天讲的第一个插件是比较简单的省市区三级联动插件,这里我想实现的效果是通过$("#DivID").MyAreaSelectPlugin ()直接在任意一个div里面显示一个三级联动插件,也就是说我们需要扩展 jQuery 元素集来提供MyAreaSelectPlugin ()这个方法,好了,首先我们需要一个js文件存放全国的省市区数据,这里我们以json格式保存,文件命名data.js,如下所示:

然后我们再新建一个Myareaselect.js文件用来写插件的代码,打开这个js文件,我们先写好jQuery插件的标准框架,如下所示:
(function ($) {
    $.fn.MyAreaSelectPlugin = function () {
        return this.each(function () { 
           //此处写插件的核心代码
        })
    }
})(jQuery)
然后我们开始写插件的核心代码,本人写js代码习惯把几个js函数封装成一个json对象,这样子代码看上去会比较清爽,也更方便调用,所以我们先在MyAreaSelectPlugin 主函数里定义这样一个json对象,把自定义的方法都放在里面,如下所示:
$.fn.MyAreaSelectPlugin = function () {
                var methods = {
                    Init: function () {
                        $(this).append("<select id=\"S_P\"></select>");
                        $(this).append("<select id=\"S_C\"></select>");
                        $(this).append("<select id=\"S_A\"></select>");
                        methods.InitProvince();
                    },
                    InitProvince: function () {
                        $.each(_areaselect_data['p'], function (index, value) {
                            $("#S_P").append("<option value=" + value + ">" + value + "</option>");
                        });
                        methods.Bind("C", $("#S_P").val());
                        methods.Bind("A", $("#S_P").val() + "-" + $("#S_C").val());
                        $("#S_P").change(function () {
                            methods.Bind("C", $("#S_P").val());
                        });
                    },
                    Bind: function (type, SelectValue) {
                        if (type == "C") {
                            $("#S_C").empty();
                            $.each(_areaselect_data['c'][SelectValue], function (index, value) {
                                $("#S_C").append("<option value=" + value + ">" + value + "</option>");
                            });
                            methods.Bind("A", $("#S_P").val() + "-" + $("#S_C").val());
                            $("#S_C").change(function () {
                                methods.Bind("A", $("#S_P").val() + "-" + $("#S_C").val());
                            });
                        }
                        if (type == "A") {
                            $("#S_A").empty();
                            if (_areaselect_data['a'][SelectValue] != null) {
                                $.each(_areaselect_data['a'][SelectValue], function (index, value) {
                                    $("#S_A").append("<option value=" + value + ">" + value + "</option>");
                                });
                            }
                        }
                    }
                };
                return this.each(function () {
                    //此处写插件的核心代码
}); }
如上所示,我们定义了一个名为methods的json对象,里面写了三个js方法,分别是Init()、InitProvince()和Bind(),代码我就不一一讲解了,相信大家应该都能看懂,就是从data.js文件中获取json数据,然后用each()遍历,绑定到select控件上,通过select控件的change事件实现联动触发。
    好了,代码写到这里,已经差不多快完成了,下面就是在return this.each(function(){})函数里调用就可以了(其实这里可以不使用return this.each()返回,因为这个插件作用于单个确定的对象,所以可以直接return this返回即可),代码如下所示:
return this.each(function () {
                    methods.Init.call(this);
                });

这边我直接通过javascript中的call()方法将当前调用的对象传入此方法,至此代码全部完成,至于对call()方法不了解的童鞋可以去百度,顺便再看一下和apply()方法的区别,这里不再赘述。
最后,我们测试一下,新建一个aspx或者html页面,在页面上引用jquery.js、data.js和Myareaselect.js三个文件,然后书写如下代码:
   $(function () {
            $("#divtest").MyAreaSelectPlugin();
        });

这里的divtest是你打算放置三级联动控件的div的id,运行页面,一切OK!



         很多人都搞不懂我为什么要花大量的时间去写jQuery插件,网上现在jQuery插件一大把,拿来用就是了,完全没必要自己写,我想说的是,别人写的再好那也只是别人的,你用100次别人的插件所学到的知识都比不上你自己写一个jQuery插件,只有自己动手去写,你才会发现jQuery的美妙之处!!!



































评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值