select2 实现多级联动下拉框,分页,搜索

  • Post author:
  • Post category:其他


需要引入

select2.full.min.js   zh-CN.js  select2.css

var select0 = $(“.select0”).children(“select”);

var select1 = $(“.select1”).children(“select”);

var select2 = $(“.select2”).children(“select”);

var select3 = $(“.select3”).children(“select”);

var select4 = $(“.select4”).children(“select”);


//给第一个下拉框的SelectChanged事件

select0.change(function (){

//取得当前下拉框的值

var select0Value = $(“.select0”).children(“select”).val();

//当第一个下拉框内容改变的时候,第三个下拉框要隐藏起来

select1.parent().hide();

select2.parent().hide();

select3.parent().hide();

select4.parent().hide();

if(select0Value !=””)

{


var options = {


url: ctx + “xxx/xxx”,      // 数据接口url

pageSize: 20, // 每次加载的数据条数

value: “userId”,  // 下拉框value字段名称

name: “userName”, // 下拉框显示字段名称

selected: [], // 默认选中项,格式:[{id:1,text:”选项1″},{id:2,text:”选项2″}]

param0: select0Value

};

ajaxSelect2(“myselect1”,options);

}

});


select1.change(function (){


var select0Value = $(“.select0”).children(“select”).val();

var select1Value = $(“.select1”).children(“select”).val();

select2.parent().hide();

select3.parent().hide();

select4.parent().hide();

if(select1Value !=”” && select1Value!=null)

{


var options = {


url: ctx + “xxx/xxx”,      // 数据接口url

pageSize: 20, // 每次加载的数据条数

value: “userId”,  // 下拉框value字段名称

name: “userName”, // 下拉框显示字段名称

selected: [], // 默认选中项,格式:[{id:1,text:”选项1″},{id:2,text:”选项2″}]

param0: select0Value,

param1: select1Value

};

ajaxSelect2(“myselect2”,options);

}

else

{


select1.parent().hide();

select2.parent().hide();

select3.parent().hide();

select4.parent().hide();

}

});

select2.change(function (){


var select0Value = $(“.select0”).children(“select”).val();

var select1Value = $(“.select1”).children(“select”).val();

var select2Value = $(“.select2”).children(“select”).val();

select3.parent().hide();

select4.parent().hide();

if(select2Value !=”” && select2Value!=null)

{


var options = {


url: ctx + “xxx/xxx”,      // 数据接口url

pageSize: 20, // 每次加载的数据条数

value: “userId”,  // 下拉框value字段名称

name: “userName”, // 下拉框显示字段名称

selected: [], // 默认选中项,格式:[{id:1,text:”选项1″},{id:2,text:”选项2″}]

param0: select0Value,

param1: select1Value,

param2: select2Value

};

ajaxSelect2(“myselect3”,options);

}

else

{


select2.parent().hide();

select3.parent().hide();

select4.parent().hide();

}

});

select3.change(function (){


var select0Value = $(“.select0”).children(“select”).val();

var select1Value = $(“.select1”).children(“select”).val();

var select2Value = $(“.select2”).children(“select”).val();

var select3Value = $(“.select3”).children(“select”).val();

select4.parent().hide();

if(select3Value !=”” && select3Value!=null)

{


var options = {


url: ctx + “xxx/xxx”,      // 数据接口url

pageSize: 20, // 每次加载的数据条数

value: “userId”,  // 下拉框value字段名称

name: “userName”, // 下拉框显示字段名称

selected: [], // 默认选中项,格式:[{id:1,text:”选项1″},{id:2,text:”选项2″}]

param0: select0Value,

param1: select1Value,

param2: select2Value,

param3: select3Value

};

ajaxSelect2(“myselect4”,options);

}

else

{


select4.parent().hide();

}

});


/**

* ajax获取select2下拉框数据(带鼠标滚动分页)

* @param selectId 下拉框id

* @param options 选项,包含如下字段:

* url 数据接口url

* pageSize 每次加载的数据条数

* name 下拉框显示字段名称

* value 下拉框value字段名称

* placeholder 默认显示的文字

* selected 默认选中项,格式:[{id:1,text:”选项1″},{id:2,text:”选项2″}]

* formatResult 返回结果回调函数,可以在该回调中,自定义下拉框数据的显示样式,比如:加入图片等

* templateSelection 选中项回调,该参数必须与formatResult参数搭配使用

* 注意点1 : 后端接口需返回 data(具体数据)和 total(总页数)两个字段

* 注意点2 : 两个自定义的回调函数中,必须要把处理结果return回来,如果没有传入formatResult参数,则采用默认的显示样式

*/

function ajaxSelect2(selectId,options) {


var value = options[“value”];

var name = options[“name”];

var flag = (typeof formatResult === “function”) ? true : false;

var select2Option = {


language: “zh-CN”,

allowClear: true,

placeholder: options[“placeholder”] || “请选择”,

ajax:{


url: options[“url”],

type: “post”,

dataType: “json”,

delay: 50,

data: function(params){


// 传递到后端的参数

return {


// 搜索框内输入的内容

param0: options[“param0”],

param1: options[“param1”],

param2: options[“param2”],

param3: options[“param3”],

searchkey: params.term ,

// 当前页

curPage: params.page || 1,

// 每页显示多少条记录,默认20条

pageSize: options[“pageSize”] || 20

};

},

cache:true,

processResults: function (res, params) {


params.page = params.page || 1;

var cbData = [];

if (flag) {


cbData = res.rows;

} else {


var data = res.rows;

var len = data.length;

for(var i= 0; i<len; i++){


var option = {“id”: data[i][value], “text”: data[i][name]+'(‘+data[i][value]+’)’};

cbData.push(option);

}

}

return {


results: cbData,

pagination: {


more: (params.page * 20)  < res.total

}

};

}

},

templateSelection : function(repo) {


return  repo.text;

},// 列表中选择某一项后显示到文本框的内容

escapeMarkup: function (markup) {


// 字符转义处理

return markup;

},

// 最少输入N个字符才开始检索,如果想在点击下拉框时加载数据,请设置为 0

minimumInputLength: 0

};

if (flag) {


select2Option.templateResult = function(selectName) {


if (selectName.loading) return selectName.text;

};

select2Option.templateSelection = function(selectName) {


return selectName.text;

};

}

var $select =  $(“#”+selectId);

$select.select2(select2Option);

if (!flag) {


// 默认选中项设置

var html = ”;

var values = [];

var selected = options[‘selected’];

if (selected) {


$.each(selected,function (index,item) {


values.push(item.id);

html += ‘<option value=”‘+item.id+'”>’+item.text+'</option>’;

});

$select.append(html);

$select.val(values).trigger(‘change’);

$select.parent().show();

}

}

}



版权声明:本文为zhangf_1234原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。