You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.3 KiB
117 lines
3.3 KiB
/*
|
|
* json2select
|
|
*
|
|
* Copyright (c) 2008 Shawphy (shawphy.com)
|
|
* Dual licensed under the MIT and GPL licenses:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Create selects from JSON
|
|
*
|
|
* @example $("#selectt").json2select( json, dft, name, deep);
|
|
* @desc 在#selectt中通过d创建一组关联的select
|
|
*
|
|
* @param json,格式如下
|
|
* var json=[
|
|
* {
|
|
* t:"欧洲某地",
|
|
* a:"欧洲"
|
|
* },
|
|
* {
|
|
* t:"中国某地",
|
|
* a:"中国",
|
|
* d:[
|
|
* {
|
|
* t:"上海",
|
|
* a:"上海"
|
|
* },
|
|
* {
|
|
* t:"云南某地",
|
|
* a:"云南某地",
|
|
* d:[
|
|
* {
|
|
* t:"大理",
|
|
* a:"大理"
|
|
* }
|
|
* ]
|
|
* }
|
|
* ]
|
|
* },
|
|
* {
|
|
* t:"日本某地",
|
|
* a:"日本",
|
|
* d:[
|
|
* {
|
|
* t:"东京",
|
|
* a:"东京"
|
|
* },
|
|
* {
|
|
* t:"北海道",
|
|
* a:"北海道",
|
|
* d:[
|
|
* {
|
|
* t:"北海道的某个地方",
|
|
* a:"北海道的某个地方"
|
|
* }
|
|
* ]
|
|
* }
|
|
* ]
|
|
* }
|
|
* ];
|
|
* @param dft,数组,设置默认值,如["中国","云南","大理"]
|
|
* @param name,字符串,默认值:sel,用于设置select的name的前缀
|
|
* @param deep,整形数字,默认值:0,用于设置初始的深度,如设置为0,则第一个select的name属性就是sel0
|
|
* @return 调用它的对象
|
|
* @type jQuery对象
|
|
*
|
|
*/
|
|
|
|
;(function($) {
|
|
$.fn.json2select=function(json,dft,name,deep,css) {
|
|
//参数初始化
|
|
var _this=this, //保存呼叫的对象
|
|
name=name||"sel", //如果未提供名字,则为默认为sel
|
|
deep=deep||0, //深度,默认为0,即生成的select的name=sel0
|
|
dft=dft||[], //默认值
|
|
css=css||'height: 150px; width: 140px;';
|
|
//换内容的时候删除旧的select
|
|
$("[name="+name+deep+"]",_this).nextAll().remove();
|
|
if (json[0]) {
|
|
//新建一个select
|
|
var slct=$("<select name='"+name+$("select",_this).length+"' id='"+name+$("select",_this).length+"'></select>");
|
|
//建立一个默认项,value为空,修改请保留为空
|
|
$.each(json,function(i,sd) {
|
|
//添加项目,并用data将其子元素附加在这个option上以备后用。
|
|
if(i == 0){
|
|
$("<option value='"+sd.a+"' selected='selected' id='xxx'>"+sd.t+"</option>").appendTo(slct).data("d",sd.d||[]);
|
|
}else {
|
|
$("<option value='"+sd.a+"' >"+sd.t+"</option>").appendTo(slct).data("d",sd.d||[]);
|
|
}
|
|
});
|
|
|
|
$("#xxx").select();
|
|
//绑定这个select的change事件
|
|
slct.change(function(e,dftflag) {
|
|
//如果选的不是value为空的,则调用方法本身。如果已经初始化过了,即,不是由trigger触发的,而是手工点的,则不将dft传递进去。
|
|
$(this).val()&&_this.json2select($(":selected",this).data("d"),dftflag?dft.slice(1):[],name,$(this).attr("name").match(/\d+/)[0]);
|
|
//设置初始值,并且触发change事件,传递true参数进去。
|
|
|
|
var arrayObj = new Array();
|
|
$('#cascade_'+name+' select').each(function() {
|
|
var val = $(this).val();
|
|
if(val){
|
|
arrayObj. push(val);
|
|
}
|
|
});
|
|
var res = arrayObj.join(',');
|
|
$('#data_'+name).val(res);
|
|
|
|
}).appendTo(_this).val(dft[0]||0).trigger("change",[true]);
|
|
}
|
|
//返回jQuery对象
|
|
return _this;
|
|
};
|
|
})(jQuery);
|