dropdown.js
2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
* dropdown 下拉框插件
* 使用方法:
* html - <div><input id="x" /></div>
* js - $("#x").dropdown();
* 参数: {
* data: Array // 下拉框选项数据
* btn: "测试" // 下拉框外部按钮, 默认在input中生成下拉图标的按钮
* onSelect: // 选择对应选项的回调 参数为当前选中项的元素
* }
*/
define("dropdown", ['components/common'], function() {
var tmpl = '\
<div class="ad-dropdown">\
<ul class="ad-dropdown-menu"></ul>\
</div>';
var alaways = function() { return true; }
function DropDown(settings) {
var $el = $(settings.el),
$container = $(settings.container || "body"),
$dropwdown = $el.siblings(".ad-dropdown"),
$btn = $("<span><i></i></span>"), width;
if(!$el.length || $dropwdown.length) return;
settings.onSelect = settings.onSelect || alaways;
$el.parent().addClass("ad-dropdown-container");
$el.addClass("form-control ad-dropdown-toggle");
$dropwdown = $(tmpl);
$dropwdown.find(".ad-dropdown-menu").html(this.getListTmp(settings.data));
$dropwdown.insertAfter($el);
if(settings.btn) {
$btn = $("<div class='btn ad-dropdown-btn'>" + settings.btn + "</div>");
}
$btn.insertAfter($el).on("click", function (e) {
var $parent = $el.parent();
$container.find(".ad-dropdown-container").each(function() {
if(this != $parent[0]) {
$(this).removeClass("show");
}
});
$parent.toggleClass("show");
e.stopPropagation();
});
if(settings.btn) {
width = $btn.outerWidth();
$el.parent().css("padding-right", width).addClass("external-btn");
}
$dropwdown.on("click", ".ad-dropdown-menu-item", function(e) {
var $item = $(this), v = $item.html();
settings.onSelect(this, v);
$el.val(v);
});
$container.off("click.dropdown").on("click.dropdown", function() {
$container.find(".ad-dropdown-container").removeClass("show");
});
}
DropDown.prototype = {
getListTmp: function(list) {
var tmp = "";
list = list ||[];
tmp = list.reduce(function (prev, text) {
return prev + "<li class='ad-dropdown-menu-item'>" + text + "</li>";
}, tmp);
return tmp;
}
};
$.fn.dropdown = function(settings) {
settings = settings || {};
settings.el = this;
new DropDown(settings);
return this;
};
return {
init: function(settings) {
new DropDown(settings);
}
};
});