码迷,mamicode.com
首页 > Web开发 > 详细

jQuery插件——下拉选择框

时间:2017-08-17 15:46:24      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:插件   sel   设置   scl   依赖   color   back   ems   val   

其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件。

既然是jQuery插件,那么必然是依赖jQuery的了。

老规矩,直接上代码吧!

;(function () {
    $.fn.extend({
      dropdown:function (options) {
        return this.each(function (i, val) {
          $(val).css("position", "relative");
          // 设置默认参数
          var opts = $.extend({
            color: "#28c4ff",
            items: [
              {key1: "选项一"},
              {key2: "选项二"},
              {key3: "选项三"},
              {key4: "选项四"},
              {key5: "选项五"}
            ],
            callback: function () {
              
            }
          }, options);

          // 创建默认选择--请选择
          var $defaultVal = $("<p class=‘item‘></p>").html("请选择").appendTo($(this));

          // 创建选择项
          var $items = $("<ul class=‘menu-options‘></ul>").css("backgroundColor", $(document.body).css("backgroundColor"));
          $(this).append($items);
          // 为每一个选择项添加属性 如果是对象类型,则添加key作为属性,如果就是字符串的话,直接既当做属性,也当做内容添加
          $.each(opts.items, function (index, item) {
            if (typeof item == "string") {
              $("<li></li>").html(item).attr("data-val", item).appendTo($items);
            } else if (typeof item == "object") {
              for (var key in item) {
                $("<li></li>").html(item[key]).attr("data-val", key).appendTo($items);
              }
            }
          });

          $defaultVal.on("click", function (ev) {
            ev.stopPropagation();
            $(this).toggleClass("open");
            $(this).hasClass("open") ? $(this).next().slideDown() : $(this).next().slideUp()
          });

          // 选择项的点击事件
          $items.on("click", "li", function (ev) {
            ev.stopPropagation();
            var $this = $(this);
            console.log($this.attr("data-val"))
            $(this).addClass("active").css("backgroundColor", opts.color).siblings().removeClass("active").css("backgroundColor",$this.parent().css("backgroundColor"));
            opts.callback();
            $this.parent().slideUp(function () {
              $this.parent().prev("p").html($this.html()).attr("data-val", $this.attr("data-val")).removeClass("open");
            });
            
          });
          // 点击空白部分,关闭下拉选择框
          $(window).on("click", function () {
            if ($defaultVal.hasClass("open")) {
              $defaultVal.trigger("click");
            }
          })
        });
      }
    })
})(jQuery);

  页面上比较干净:  

<div class="dropdown"></div>

  js部分属于直接调用dropload方法即可:

    $(".dropdown").dropdown({
        color: "#f0f",
        items: [
          {"shucai": "青菜"},
          {"shuiguo": "葡萄"},
          {"food": "面包"}
        ],
        callback: function () {
          console.log($(this))
        }.bind($(".dropdown"))
      });

  items数组内容也可以直接是多个字符串,如: ["苹果", "水蜜桃", "哈密瓜"]

jQuery插件——下拉选择框

标签:插件   sel   设置   scl   依赖   color   back   ems   val   

原文地址:http://www.cnblogs.com/zhuhuoxingguang/p/7381952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!