xiasf
3/1/2018 - 7:12 AM

地域联动

地域联动

<div class="form-group">
    <label class="col-sm-2 control-label">地区</label>
    <div class="col-md-2">
        <select data-placeholder="选择省份..." name="province" child="city,area" onchange="areaChangeCallback(this);" class="auto form-control chosen-select province"></select>
    </div>
    <div class="col-md-2">
        <select data-placeholder="选择城市..." name="city" child="area" parent="province" onchange="areaChangeCallback(this);" class="auto form-control chosen-select city"></select>
    </div>
    <div class="col-md-2">
        <select data-placeholder="选择区/县..." name="area" parent="city" pattern="required" class="auto form-control chosen-select area"></select>
    </div>
</div>

<script>

//artTemplate模板 {name:组件名字,area_id:选中的地区ID,data:地区的对象}
var areaTemplate = '<option value="">请选择</option>'+'<%for(var index in data){%>'+'<%var item = data[index]%>'+'<option value="<%=item.area_id%>" <%if(item.area_id == select_id){%>selected="selected"<%}%>><%=item.area_name%></option>'+'<%}%>';

/**
 * 切换城市地区
 * @param _self 地域对象
 */
function areaChangeCallback(_self)
{
	var parent_id = _self.value;
	var childName = $(_self).attr('child');

	if(!childName)
	{
		return;
	}

	//拆分子对象
	var childArray = childName.split(',');
	for(var index in childArray)
	{
		$('[name="'+childArray[index]+'"]').empty();
	}

	//生成js联动菜单
	createAreaSelect(childArray[0],parent_id);
}


/**
 * 生成地域js联动下拉框
 * @param name
 * @param parent_id
 * @param select_id
 */
function createAreaSelect(name,parent_id,select_id)
{
	//生成地区
	$.getJSON("{url:/block/area_child}",{"aid":parent_id,"random":Math.random()},function(json)
	{
		$('[name="'+name+'"]').html(template.render('areaTemplate',{"select_id":select_id,"data":json}));

		if (parent_id) {
            $(".city").chosen("destroy");
			$(".city").chosen();

			$(".area").chosen("destroy");
			$(".area").chosen();
		}
		else {
			$(".province").chosen();
			$(".city").chosen();
			$(".area").chosen();
		}
	});
}
    
$(function(){
	//初始化地域联动
	template.compile("areaTemplate",areaTemplate);

	{if:isset($ship) && $ship}
	createAreaSelect('province',0,{$ship['province']});
	createAreaSelect('city',{$ship['province']},{$ship['city']});
	createAreaSelect('area',{$ship['city']},{$ship['area']});
	{else:}
	createAreaSelect('province',0,'');
	{/if}
});

    
// 参考:[前端模版artTemplate的介绍及使用](http://blog.csdn.net/playboyanta123/article/details/45536501)
</script>