/***
* lSelect(Link Select) 无限级联动下拉菜单插件
*
* JSON数据格式示例:[{"title": "北京", "value": "beijing"},{"title": "湖南", "value": "hunan"},{"title": "湖北", "value": "hubei"}]
*
**/
(function($){
$.extend($.fn, {
lSelect: function(options){
// 默认参数
var settings = {
url: "",// 数据获取url
parameter: "path",// 数据获取参数名称
title: "title",// 定义JSON数据格式:选择名称
value: "value",// 定义JSON数据格式:选择值
emptyOption: "请选择",// 选择提示,null表示无提示
cssClass: "lSelect",// 下拉框css名称
cssStyle: {"margin-right": "10px"},// 下拉框左右css样式
isFadeIn: true// 是否渐显
};
$.extend(settings, options);
return this.each(function(){
var $this = $(this);
$this.hide();
var selectGroupClass = "lSelect" + Math.round(Math.random() * 1000000);
var items = {};
var selectName = $this.attr("name");
var defaultSelectedValue = $this.val();
if (defaultSelectedValue == "") {
addSelect($this);
} else {
var $select = $this;
var defaultSelectedValueArray = defaultSelectedValue.split(",");
for (var i = 0; i < defaultSelectedValueArray.length; i++) {
var $nextSelect = addSelect($select, defaultSelectedValueArray[i]);
if($nextSelect) {
$select = $nextSelect;
}
}
}
// 绑定Select元素
function bindSelect(element) {
element.bind("change", function(){
addSelect(element);
$this.val(element.val());
});
}
// 获取Json数据
function getJson(key) {
if(typeof(items[key]) == "undefined") {
var url = settings.url;
if (key != "lSelectRoot") {
var parameter = settings.parameter;
if (parameter != null) {
if(url.indexOf("?") > 0) {
url = url + "&" + parameter + "=" + key;
} else {
url = url + "?" + parameter + "=" + key;
}
}
}
$.ajaxSetup({async: false});
$.getJSON(url, function(json) {
items[key] = json;
});
}
return items[key];
}
// 填充option
function fill(element, key, selected) {
var json = getJson(key);
if (!json) {
return false;
}
var length = 0;
for (j in json){
length ++;
}
if (length == 0) {
return false;
} else {
element.empty();
if(settings.emptyOption != null) {
element.append('');
}
$.each(json, function(id, object) {
var optionValue = "";
if (object.value.indexOf(",") >= 0) {
var optionValueArray = object.value.split(",");
optionValue = optionValueArray[optionValueArray.length - 1];
} else {
optionValue = object.value;
}
var option;
if(selected && optionValue == selected) {
option = $('');
} else {
option = $('');
}
element.append(option);
});
return true;
}
}
// 增加select
function addSelect(element, selected) {
var $nextSelect;
var isFill;
if(element.is("select")) {
element.nextAll("." + selectGroupClass).remove();
if(element.val() == "") {
return;
}
element.after('');
$nextSelect = element.next("." + selectGroupClass);
isFill = fill($nextSelect, element.val(), selected);
} else {
element.after('');
$nextSelect = element.next("." + selectGroupClass);
isFill = fill($nextSelect, "lSelectRoot", selected);
}
if (isFill) {
element.css(settings.cssStyle);
if(settings.isFadeIn) {
$nextSelect.fadeIn();
bindSelect($nextSelect);
} else {
$nextSelect.show();
}
return $nextSelect;
} else {
$nextSelect.remove();
}
}
});
}
});
})(jQuery);