- 浏览: 435434 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
fred7510:
死的啊。。不过还是谢了
flex 截图 -
hechuanshan:
flex状态及动画 -
Da嗒_Sunny:
求使用说明
flex图片裁剪 -
wapj23:
...
flex中定制右键菜单 -
lion_leon:
谢谢!帮了我的大忙了!
利用flashvars给flash传值
效果地址:
http://search1.taobao.com/browse/ad_search.htm
具体代码见: 附件1
其中关键代码解析:
一、构造类别数组
声明一个类别数组cat
cats['11']=['电脑硬件/台式整机/网络设备','1']; cats['110502']=['品牌液晶显示器','11']; cats['110202']=['内存','11'];
5000多个略…,规则为:
数组的下标是类别id,
第一个元素为类别名
第二个元素为类别父id
接下来构一个将cats数组存入一个parent数组,数组的下标为cats数组的父id,元素为类别数组本身:
for (c in cats) { var ii = cats[c][1]; if (!parent[ii]) { parent[ii] = new Array(); } parent[ii][parent[ii].length] = c; }
这样,形成如下图的两个类别数组:
二、填充下拉框方法
利用cats 和parent两个数组填充,主要是得到了选中的某个类别的子类别集合:
/* id:选中的类别id obj:下拉列表框dom对象 defaultId: 如果要选中默认的某个子,则传递此参数 isFirst:为了可以连级初始化所用。 */ function _addList(id, obj, defaultId, isFirst) { if (!defaultId) { defaultId = -1; } var s = 0; if (haveBlank == 'true') { obj.options[s++] = new Option('', ''); } if (parent[id]) { //利用上面的数组关系直接得到了子数组 for (var i = 0; i < parent[id].length; ++i) { var catId = parent[id][i];//某个子的id if (!parent[catId]) { obj.options[s++] = new Option(cats[catId][0], catId); }else { obj.options[s++] = new Option(cats[catId][0] + ' ->', catId); //如果还有子显示一个"->" } if (defaultId >= 0 && defaultId == catId) { obj.options[s-1].selected = true; changeSubCat(obj); }else if (i == 0 && !isFirst && haveBlank == '') { obj.options[i].selected = true; changeSubCat(obj); } } } }
三、填充下拉框的子下拉框
其中做了一些判断是否有子,是否有子下拉框。
function changeSubCat(obj) { if (!obj || !obj.name) { error('obj not found!'); return; } var name = obj.name; var form = document.forms[formName]; if (!form) { error('form not found!'); return; } var selectNum = -1; for (var i = 0; i < catSel.length; ++i) { if (catSel[i] == name) { selectNum = i; break; } } if (selectNum < 0) { debug('can\'t found sub select'); _setValue(); return; } if (selectNum + 1 >= catSel.length || !form.elements[catSel[selectNum + 1]]) { debug('can\'t found sub select 1'); _setValue(); return; } var subSel = form.elements[catSel[selectNum + 1]]; _clearList(subSel); for (var i = selectNum + 1; i < catSel.length; ++i) { if (form.elements[catSel[i]]) { _clearList(form.elements[catSel[i]]); } } if (obj.options[obj.selectedIndex].value == '') { _setValue(); return; } var catId = obj.options[obj.selectedIndex].value; if (!parent[catId]) { debug('no sub select data'); _setValue(); return; } _addList(catId, subSel); _setValue(); }
如上方法可实现了多级下拉框连动,不过有以下问题:
1. 和form绑定死了
2. 在一个页面无法存在多个连动下拉框
3. 下拉框的name不能自定义,
在项目中同样有此需求,需要同时使用多个连动下拉框,同时name也需自定义,稍改进了一下,将各种方法和数组放入类中,同时根据下拉框的id来绑定下拉框,集成了下拉框的onchagne事件
function TreeSelect(){ this.haveBlank=undefined; this.cats=undefined; this.parent=undefined; /** * 初始化数据 */ this.init= function(_cats,_haveBlank,_selid){ this.cats= _cats; this.initParnet(_cats); this.haveBlank=_haveBlank; this.initSelObj(_selid); }; /** * 初始化select对象数组 */ this.initSelObj=function(_selid){ var p = this; function fireChangeEvent(){ p.changeSubCat(event.srcElement); } this.catSel = _selid.split(','); this.sel_ar = new Array(); for(var i=0;i<this.catSel.length;i++){ this.sel_ar[i] = document.getElementById(this.catSel[i]); this.sel_ar[i].attachEvent('onchange',fireChangeEvent,true); } }; /** * 初始化树数据数组 */ this.initParnet=function(cats){ this.parent = new Array(); for (c in cats) { var ii = cats[c][1]; if (!this.parent[ii]) { this.parent[ii] = new Array(); } this.parent[ii][this.parent[ii].length] = c; } }; /** * 清空select列表 */ this._clearList=function(obj) { if (!obj) { return; } for (var i = obj.length - 1; i >= 0; --i) { obj.remove(i); } obj.value = ''; } ; /** * 改变子的选择 */ this.changeSubCat=function(obj) { if (!obj || !obj.id) { error('obj not found!'); return; } var name = obj.id; var selectNum = -1; for (var i = 0; i < this.catSel.length; ++i) { if (this.catSel[i] == name) { selectNum = i; break; } } if (selectNum < 0) { debug('can\'t found sub select'); return; } if (selectNum + 1 >= this.catSel.length || !document.getElementById( this.catSel[selectNum + 1] )) { debug('can\'t found sub select 1'); return; } var subSel = document.getElementById(this.catSel[selectNum + 1]); this._clearList(subSel); for (var i = selectNum + 1; i < this.catSel.length; ++i) { if (document.getElementById([this.catSel[i]])) { this._clearList(document.getElementById(this.catSel[i])); } } var catId = obj.options[obj.selectedIndex].value; if (!this.parent[catId]) { debug('no sub select data'); return; } this._addList(catId, subSel); }; /** * 填充一个select */ this._addList=function(id, obj, defaultId, isFirst) { if (!defaultId) { defaultId = -1; } var s = 0; if (this.haveBlank == 'true') { obj.options[s++] = new Option('请选择', ''); } if (this.parent[id]) {//当前选中的子数组 for (var i = 0; i < this.parent[id].length; ++i) { var catId = this.parent[id][i]; if (!this.parent[catId]) { obj.options[s++] = new Option(this.cats[catId][0], catId); }else { obj.options[s++] = new Option(this.cats[catId][0] + ' ->', catId); } if (defaultId >= 0 && defaultId == catId) { obj.options[s-1].selected = true; this.changeSubCat(obj); }else if (i == 0 && !isFirst && this.haveBlank == '') { obj.options[i].selected = true; this.changeSubCat(obj); } } } }; } function debug(info) { //alert(info); } function error(info) { alert(info); }
详见: 附件2
实际项目中需要和数据库结合起来,通过标签输出,下面附件内容供大家参考:
发表评论
-
一个跨平台的DOMContentLoaded的解决方案
2009-03-26 17:22 1754一个跨平台的DOMContentLoaded的解决方案 ... -
遍历某个dom下的子节点
2009-03-24 16:22 2980var wrap = document.getElementB ... -
Extjs Combo连动
2009-03-16 17:29 4546lcombo.html <!DOCTYPE HTML ... -
利用AJAX取头部信息
2009-03-16 10:14 1200//取所有头部信息 xmlhttp.getAllRespons ... -
Extjs的Ajax Request源码流程分析
2009-03-12 10:29 1271图片太大,不让提交,只能使用链接了。 http://king ... -
http status 一览
2009-03-11 17:09 1112<PRE class=java name=&qu ... -
html5参考手册
2009-02-25 14:05 1560原文:http://www.w3school.com.cn ... -
分析yui结合flash的上传组件
2009-02-13 12:44 2020yui上传组件: http://developer.yahoo ... -
利用jsdt调试js
2008-12-18 16:36 22561、下载eclipse的插件,见附件 2、将plugin下的三 ... -
EXT Menu改变Menu的Layer class之后菜单功能失败的解决办法
2008-11-14 11:32 1561ext2中可以改变 Menu的class ,比如不想要前面的竖 ... -
ie的userdata 和 firefox的sessionStorage
2008-11-10 10:38 2535保存客户端数据,ie用userdata firefox用se ... -
js复制,兼容firefox和ie
2008-10-17 14:55 3153setClipboard: function(data, va ... -
解决ie中js生成的图片不显示的问题
2008-09-05 13:09 2211问题:js生成的dialog,而图片却不显示,如:var bu ... -
如何去除点击链接时出现的虚线框
2008-09-01 10:20 1676有时候在一个页面用到收放功能的时候时,总有一个虚线框在触发收放 ... -
转存附件用
2008-08-31 19:02 0test -
slice、pop的神奇用法
2008-08-29 14:45 1505slice 要取得一个数组或一个字串的某段时,那就用slice ... -
void(0)的作用
2008-08-26 14:48 1393经常见<a href="javascript: ... -
web前端结构与行为的分离
2008-08-05 17:53 1151web前端结构与行为的分 ... -
解决aptana代码不提示的问题
2008-08-05 11:47 4770都说aptana的代码提示功能很好,可是我的安装上之后怎么也不 ... -
aptana1.x破解
2008-08-05 11:03 1426package com.aptana.ide.core.lic ...
相关推荐
实现选择框多级连动需要使用 JSP 和 Java technologies,并结合 Struts 框架和 JavaScript 代码来实现。在开发过程中,需要注意数据库表的设计、表单 bean 的设计、服务器端的数据处理和返回等方面。
综上所述,这个“短信发送平台Demo js多级连动”项目涵盖了JavaScript基础、前端交互设计、数据处理和响应式布局等多个方面,是一个实践Web开发技能的好案例。开发者可以通过这个Demo学习和掌握这些关键技术,并应用...
"连动下拉"是一种常见的用户界面交互设计,通常用于多级选择场景,如地区选择、类别筛选等。用户在一级菜单中选择一项后,二级菜单会根据一级选择动态更新其选项,以此类推。这种设计能有效节省屏幕空间,提高用户...
标题和描述提到的"多级连动如省份城市的选择连动",正是这种交互模式的一个具体实例,主要用于实现用户在选择一个地区(如省份)后,自动更新下一个地区级别(如城市)的选项,以显示与所选省份对应的城市列表。...
【Ajax实现三级联动】是指在Web开发中,利用Ajax技术实现多级下拉菜单之间的联动效果,例如在省、市、区的选择中,当用户在一级下拉菜单(如省份)中选择一个选项时,二级下拉菜单(如城市)会自动更新与之相关的...
**JS多级连动菜单**,即通过JavaScript技术来实现多个下拉选择框之间的联动。第一个下拉框(称为一级菜单)的变化会影响到第二个下拉框(称为二级菜单)中的选项,以此类推,可以有多级的联动。通常,这种联动是单向...
- 实现方法:通过JavaScript操作DOM元素,实现添加、修改和删除下拉列表项的功能。 - **2.3 可以输入内容的下拉框** - 描述:实现一个支持输入搜索的下拉列表。 - 实现方法:使用JavaScript监听用户的输入事件,...
AngularJS,一个由Google维护的JavaScript框架,专注于数据绑定和依赖注入,使得前端开发更加模块化和易于维护。而Bootstrap,则是Twitter推出的一款用于快速构建响应式和移动优先网站的前端框架,它提供了丰富的UI...
本案例中,开发人员选择使用 **JavaScript (JS)** 和 **XML** 来实现省市二级联动下拉框功能。这种方式的优点是不需要服务器端的支持,只需要前端技术就可以完成,因此具有很好的灵活性和轻量性。 #### 三、XML文件...
联动下拉菜单,又称为级联菜单或连动菜单,是指当用户在一个下拉菜单中选择某个选项时,会触发另一个下拉菜单的显示或更新。这种设计可以有效节省页面空间,提高用户体验,尤其在处理多级分类时。 二、无限级联动的...
### JavaScript代码常用大全知识点解析 #### 一、验证类 **1. 数字验证** - **1.1 整数验证** - 目的是确保输入的字符串仅包含整数。 - 可以通过正则表达式 `/^-?\d+$/.test(str)` 实现,其中 `-?` 表示可选的...
这里我们关注的是如何利用AJAX实现三级联动的效果,即在一个下拉菜单中选择一项时,相关的第二级和第三级下拉菜单会根据选择自动更新其内容。这在如地区选择、产品分类等场景中非常常见。 首先,我们需要理解AJAX的...
- **下拉菜单**:实现多级下拉菜单。 - **动态效果**:为状态栏和标题栏添加动态效果。 ##### 树型结构 树型结构用于表示层级关系的数据结构。 - **ASP+SQL 版本**:基于ASP和SQL Server构建的树型结构。 - **ASP+...
在IT行业中,Dojo是一个强大的JavaScript工具包,它提供了丰富的功能和组件,帮助开发者构建复杂的Web应用程序。在处理用户界面交互时,特别是涉及到多级联动的场景,Dojo的威力尤为显著。本篇文章将深入探讨如何...
总结起来,"ASP三级联动1个表(带后台)"是一个涉及服务器端脚本、数据库操作、前端交互和响应式设计的综合项目,通过合理组织和处理数据,实现了高效、动态的多级联动效果。这个项目对于学习ASP开发和Web交互设计来说...
在本文中,我们将探讨如何使用jQuery和layui框架来实现二级联动下拉选择,特别是针对省份和城市的选择。layui是一款流行的前端UI框架,它提供了丰富的组件和API,使得开发者能够快速构建美观且响应式的Web应用。在...