新增下拉框级联选择组件,城市联动例子
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
/*!
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
* 级联选择插件
|
||||
* @author ThinkGem
|
||||
* @version 2021-4-25
|
||||
*/
|
||||
(function ($) {
|
||||
$.fn.cascadeSelect = function (options) {
|
||||
var self = this, opts = $.extend({
|
||||
data: [],
|
||||
id: "id",
|
||||
name: "name",
|
||||
children: "children",
|
||||
blankOptionLabel: "请选择",
|
||||
cssClass: 'form-control',
|
||||
cssStyle: "width:150px",
|
||||
change: function(){}
|
||||
}, options);
|
||||
var data = opts.data,
|
||||
i, l, key = "id", parentKey = "pId", childKey = "children";
|
||||
if (Object.prototype.toString.apply(data) === "[object Array]") {
|
||||
var treeData = [], map = [];
|
||||
for (i=0, l=data.length; i<l; i++) {
|
||||
map[data[i][key]] = data[i];
|
||||
}
|
||||
for (i=0, l=data.length; i<l; i++) {
|
||||
if (map[data[i][parentKey]] && data[i][key] != data[i][parentKey]) {
|
||||
if (!map[data[i][parentKey]][childKey]){
|
||||
map[data[i][parentKey]][childKey] = [];
|
||||
}
|
||||
map[data[i][parentKey]][childKey].push(data[i]);
|
||||
} else {
|
||||
treeData.push(data[i]);
|
||||
}
|
||||
}
|
||||
opts.data = treeData;
|
||||
}else {
|
||||
opts.data = [data];
|
||||
}
|
||||
|
||||
$("<style></style>").html("\n\
|
||||
.input-group.cascade-select .form-control {display:table-cell;}\n\
|
||||
.input-group.cascade-select .form-control:not(:last-child) {border-right:0}\n\
|
||||
.input-group.cascade-select .form-control:first-child:last-child {border-radius:4px}\n\
|
||||
").appendTo($(self).addClass('cascade-select').parent());
|
||||
var html = '', data = opts.data, params = [data];
|
||||
html += '<select class="'+opts.cssClass+'" style="'+opts.cssStyle+'">'
|
||||
+'<option value="">'+opts.blankOptionLabel+'</option>';
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
html += '<option value="' + data[i][opts.id]
|
||||
+ '|' + (data[i][opts.children] == null ? null : i)
|
||||
+ '|' + (escape(data[i][opts.name]))
|
||||
+ '">' + data[i][opts.name] + '</option>';
|
||||
}
|
||||
html += '</select>';
|
||||
$(self).html(html);
|
||||
var createSelect = function() {
|
||||
$(self).children('select').change(function () {
|
||||
var self2 = this, val = $(self2).val().split("|")[1];
|
||||
$(self2).nextAll('select').remove();
|
||||
if (val % 1 == 0) {
|
||||
var idx = $(self2).index(), html2 = "";
|
||||
params[idx + 1] = params[idx][val][opts.children];//一条线放一个数组 不同线重置
|
||||
html2 += '<select class="'+opts.cssClass+'" style="'+opts.cssStyle+'">'
|
||||
+'<option value="">'+opts.blankOptionLabel+'</option>';
|
||||
for (var i = 0; i < params[idx + 1].length; i++) {
|
||||
html2 += '<option value="' + params[idx + 1][i][opts.id]
|
||||
+ '|' + (params[idx + 1][i][opts.children] == null ? null : i)
|
||||
+ '|' + (escape(params[idx + 1][i][opts.name]))
|
||||
+ '">' + params[idx + 1][i][opts.name] + '</option>';
|
||||
}
|
||||
html2 += '</select>';
|
||||
$(self2).after(html2);
|
||||
$(self).children("select").unbind("change");
|
||||
createSelect();
|
||||
}
|
||||
var vals = [], names = [];
|
||||
$(self).find('select').each(function(){
|
||||
var val = $(this).val();
|
||||
if (val != ''){
|
||||
vals.push(val.split("|")[0]);
|
||||
names.push(unescape(val.split("|")[2]));
|
||||
}
|
||||
});
|
||||
opts.change(vals, names);
|
||||
})
|
||||
}
|
||||
createSelect();
|
||||
}
|
||||
})(jQuery);
|
||||
@@ -163,7 +163,7 @@
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required hide">*</span> 区域选择(异步):<i class="fa icon-question hide"></i></label>
|
||||
<span class="required hide">*</span> 城市选择(异步):<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:treeselect id="testAreaCode" title="区域选择"
|
||||
path="testAreaCode" labelPath="testAreaName"
|
||||
@@ -173,6 +173,39 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required hide">*</span> 城市联动:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group" id="cascadeSelect"></div>
|
||||
<script src="${ctxStatic}/jquery-plugins/jquery.cascadeSelect.js?${_version}"></script>
|
||||
<script type="text/javascript">
|
||||
$(function(){
|
||||
js.ajaxSubmit(ctx + '/sys/area/treeData', function(data){
|
||||
$("#cascadeSelect").cascadeSelect({
|
||||
data: data, cssStyle: 'width:150px',
|
||||
change: function(vals, names){
|
||||
$('#areaSelectValue').val(vals.join(',') + ' | ' + names.join('/'))
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required hide">*</span> 联动选择结果:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:input path="areaSelectValue" maxlength="200" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
|
||||
Reference in New Issue
Block a user