简单的三级联动
实现选车型的三级联动
demo地址 http://style.scalap.com/blog/foo.html
借鉴于http://www.codebit.cn/javascript/combo-select.html
这里注释比较清晰(感谢上面辣么多注释的原作者,见上行链接),不做过多阐释,代码如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="http://style.cdn.juhaomai.net/style/js/global/lib/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
</head>
<body>
<script language="JavaScript" type="text/javascript">
/*
* 说明:将指定下拉列表的选项值清空
*
* @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须
*/
function removeOptions(selectObj) {
if (typeof selectObj != 'object') {
selectObj = document.getElementById(selectObj);
}
// 原有选项计数
var len = selectObj.options.length;
for (var i = 0; i < len; i++) {
// 移除当前选项
selectObj.options[0] = null;
}
}
/*
* 说明:设置传入的选项值到指定的下拉列表中
*
* @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须
* @param {Array} optionList 选项值设置 格式:[{txt:'北京', val:'010'}, {txt:'上海', val:'020'}] ,必须
* @param {String} firstOption 第一个选项值,如:“请选择”,可选,值为空
* @param {String} selected 默认选中值,可选
* @param {Boolean} needBlankOption 是否需要空选择开头,不加这个三级联动会有问题的喔
*/
function setSelectOption(selectObj, optionList, firstOption, selected, needBlankOption) {
if (typeof selectObj != 'object') {
selectObj = document.getElementById(selectObj);
}
// 清空选项
removeOptions(selectObj);
// 选项计数
var start = 0;
// 如果需要添加第一个选项
if (firstOption) {
selectObj.options[0] = new Option(firstOption, '');
// 选项计数从 1 开始
start++;
}
if (needBlankOption) {
selectObj.options[0] = new Option('', '');
// 选项计数从 1 开始
start++;
}
var len = optionList.length;
for (var i = 0; i < len; i++) {
// 设置 option
selectObj.options[start] = new Option(optionList[i].txt, optionList[i].val);
// 选中项
if (selected == optionList[i].val) {
selectObj.options[start].selected = true;
}
// 计数加 1
start++;
}
}
function removeAllSelect() {
document.getElementById("series").length = 0;
document.getElementById("models").length = 0;
}
function removeModelSelect() {
document.getElementById("models").length = 0;
}
</script>
<script language="JavaScript" type="text/javascript">
var baseUrl = "http://style.mc2113.com/static/api/"
setBrand();
function setBrand() {
var jsonUrl = baseUrl + "brand_list.json";
var brand = [];
$.getJSON(jsonUrl, function(result) {
$.each(result, function(i, field) {
var single = {};
single.txt = field.brand_name;
single.val = field.brand_id;
brand.push(single);
});
setSelectOption('brand', brand, '', '', 1);
});
}
function setSeries(brand) {
if (!brand) {
removeAllSelect();
return;
}
var jsonUrl = baseUrl + brand + "_series_list.json";
var series = [];
$.getJSON(jsonUrl, function(result) {
$.each(result, function(i, field) {
var single = {};
single.txt = field.series_name;
single.val = field.series_id;
series.push(single);
});
removeModelSelect();
setSelectOption('series', series, '', '', 1);
}).fail(function(jqXHR, textStatus, errorThrown) {
removeAllSelect();
});
}
function setModels(series) {
if (!series) {
removeModelSelect();
return;
}
var brand = $('#brand').val();
var jsonUrl = baseUrl + brand + "_" + series + "_model_list.json";
var models = [];
$.getJSON(jsonUrl, function(result) {
$.each(result, function(i, field) {
var single = {};
single.txt = field.model_name;
single.val = field.model_id;
models.push(single);
});
setSelectOption('models', models, '', '', 1);
}).fail(function(jqXHR, textStatus, errorThrown) {
removeModelSelect();
});
}
</script>
<select name="brand" id="brand" onchange="setSeries(this.options[this.selectedIndex].value);">
</select> 型号
<select name="series" id="series" onchange="setModels(this.options[this.selectedIndex].value);">
</select> 系列
<select name="models" id="models">
</select> 模块
</body>
</html>
« 从浏览器打开微信里面的网页(How to view the site in wechat on browser) 每天读一点redis之SDS字符串 »
No Comments filed.