Jquery封装:下拉框插件

代码如下:

 1 ;(function ($, window) {
 2     $.fn.addSelect = function (options) {
 3 
 4         //合并传入与默认的参数
 5         var opts = $.extend({}, $.fn.addSelect.defaultOpts, options || {});
 6         //实现方法
 7         $(this).each(function () {
 8 
 9             var _that = $(this);
10             // 获取下拉内容容器
11             var searchContentContain = _that.find(opts.searchContentContain).length > 0 ?
12                 _that.find(opts.searchContentContain) : _that.children(":last");
13                 searchContentContain.addClass("jsSpecialControlSlideNavigationContain");
14             //赋值容器
15             var changeValue = _that.find(opts.getValueClass);
16             //触发箭头
17             var _triggerArrow = _that.find(opts.triggerElement);
18             var _triggerElement = null;
19             // 扩展点击区域,那么触发对象就是下拉三角的父元素,否则就只有下拉三角是触发下拉元素
20             if (opts.extendTrigger) {
21                 _triggerElement = _triggerArrow.parent();
22                 // 增加className  extendTriggerClass
23                 _triggerElement.addClass("extendTriggerClass").css({
24                     cursor : "pointer"
25                 });
26             } else {
27                 _triggerElement = _triggerArrow;
28             }
29             // 绑定下拉事件
30             _triggerElement.bind(opts.mouseType, function (event) {
31                 //阻止事件冒泡
32                 event.stopPropagation();
33                 //阻止默认事件
34                 event.preventDefault();
35                 // 显示或者隐藏下拉内容狂
36                 showOrHideSearchContentContain();
37             });
38 
39             function showOrHideSearchContentContain() {
40                 if (searchContentContain.is(":hidden")) {
41                     // 其他下拉框隐藏
42                     $(".jsSpecialControlSlideNavigationContain").hide();
43                     // 显示当前点击的那个下拉内容容器
44                     searchContentContain.show();
45                     _triggerArrow.addClass("sp_mousedown_plus");
46                 } else {
47                     // 隐藏下拉内容容器
48                     searchContentContain.hide();
49                     _triggerArrow.removeClass("sp_mousedown_plus");
50                 };
51             }
52             //  绑定文档事件
53             $(document).bind("click", function (event) {
54                 // 获取当前的点击元素
55                 var _target = $(event.target);
56                 //  隐藏元素
57                 searchContentContain.hide();
58             });
59 
60             //  为内容导航容器的子元素绑定事件
61             searchContentContain.children().each(function () {
62                 $(this).hover(function () {
63                     $(this).addClass(opts.addHoverClass).siblings().removeClass(opts.addHoverClass);
64                 }, function () {
65                     $(this).removeClass(opts.addHoverClass);
66                 });
67                 $(this).click(function () {
68                     var value = $(this).text();
69                     changeValue.text(value);
70                     searchContentContain.hide();
71                     opts.callBack != null ? opts.callBack(value, $(this), changeValue) : "";
72                 });
73             });
74 
75         });
76     }
77     /*
78      *    默认参数
79      *    triggerElement                触发事件的元素
80      *  mouseType                    触发的事件类型
81      *    extendTrigger                是否扩展,      布尔值,默认为false,备选参数,true
82      *    searchContentContain        下拉框容器对象  参数为id 或者class
83      *    addHoverClass                下拉框容器鼠标滑过时添加的类名  参数为不带"." 的class
84      *    getValueClass                获得新值得容器对象 参数为id或者class
85      *    callBack                    回调函数,会返回当前获取的值
86      */
87     $.fn.addSelect.defaultOpts = {
88         triggerElement : ".sp_mousedown", // className 或者id  或者元素选择器
89         mouseType : "click", // 鼠标事件
90         extendTrigger : false, //  布尔值,默认为false,备选参数,true
91         searchContentContain : ".search_con_nav", //  className 或者id  或者元素选择器
92         getValueClass : ".sp_gain_value", //  注意此参数带 "."或者"#"
93         addHoverClass : "dd_hover", //  注意此参数不带 "."且必须是class名    ,
94         callBack : null
95     };
96 })(jQuery, window);

如此使用的:

 1 $(".fd-form-select").addSelect({
 2                 triggerElement : ".fd-form-select-mousedown", // className 或者id  或者元素选择器
 3                 mouseType:"click",                // 鼠标事件
 4                 extendTrigger : true,             //  布尔值,默认为false,备选参数,true
 5                 searchContentContain : ".fd-form-select-con", //  className 或者id  或者元素选择器
 6                 getValueClass : ".fd-form-select-value" ,//  注意此参数带 "."或者"#"
 7                 addHoverClass : "hover" ,//  注意此参数不带 "."且必须是class名    
 8                 callBack:function(value){
 9                     console.log(value);
10                     //回调函数输出值
11                     
12                 }
13             });

 

posted @ 2018-09-11 10:05  心无引擎,眼无流派  阅读(712)  评论(0编辑  收藏  举报