- 浏览: 1780429 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
<script> var json__categories = <?php echo $json__categories; ?> ; //log(json__categories); //查找分类 function findcg(id){ var cg = null , hadFind = false; xu.array.each(json__categories['refs'],function(item,index){ if (hadFind) return ; if (item.id == id) cg = item ; }); return cg ; } //改变分类 function chcg(o){ if (!xu.verify._obj(o)) return ; //首先取得选中的id,,再查该id下是否存在子节点 var cid = o.value;log(cid); if (!cid) { // 缺省值时清空节点尾部所有select $eo(o).removeAfterAll(); } //在json中定位该id所对应的节点 var categorie = findcg(cid);//log(categorie); if (!categorie) return ; //查当前节点的父节点,这个似乎不用考虑,每个节点只用管理其直接子节点 //查当前节点下是否存在子节点,存在'sons'说明有子节点,创建一个下拉框并追加到尾部 if (categorie['sons']){ //清空创建的子select对象 var subCategories = categorie['sons']; $new_slt = $eo.create('select'); $new_slt.on('change',function(){ // this <-> $new_slt chcg(this); }); add_opt($new_slt.ele,'选择子分类','',0); var start = 1;// 选项计数 xu.array.each(subCategories,function(item){ add_opt($new_slt.ele,item.name,item.id,start); start ++ ; }); $eo(o).removeAfterAll().insertAfter($new_slt.ele); }else { $eo(o).removeAfterAll(); } } function add_opt(slt_obj,opt_txt,opt_value,index){ slt_obj.options[index] = new Option(opt_txt,opt_value); } function clear_opts(slt_obj){ // 原有选项计数 var len = slt_obj.options.length; for (var i=0; i < len; i++) slt_obj.options[0] = null;// 移除当前选项 } xu.ready(function(){ //设置分类的项 -- 首先设置初值项,取第一级分类 (function(){ if (!xu.verify._obj(json__categories)) { chcg = function(){} ;return ; } var start = 1;// 选项计数 xu.array.each(json__categories['tree'],function(item){ add_opt($eo('article-categorie').ele,item.name,item.id,start); start ++ ; }); })(); }); </script>
今天没有时间 抽出来了,下周抽出来 ... 我我我我
评论
3 楼
vb2005xu
2009-12-21
var json__categories = <?php echo $json__categories; ?> ; //log(json__categories); //查找分类 function findcg(id){ var cg = null , hadFind = false; xu.array.each(json__categories['refs'],function(item,index){ if (hadFind) return ; if (item.id == id) cg = item ; }); return cg ; } //改变分类 function chcg(o){ // o -> select if (!xu.verify._obj(o)) return ; //首先取得选中的id,,再查该id下是否存在子节点 var cid = o.value;//log(cid); if (!cid) { // 缺省值时清空节点尾部所有select $eo(o).removeAfterAll(); //设置categorie_id的 值,向左找相邻的且选中的分类项 var previousSlt = o.previousSibling; if (!previousSlt){ $eo('categorie_id').ele.value = null ; }else { $eo('categorie_id').ele.value = previousSlt.options[previousSlt.selectedIndex].value ; } return ; } //在json中定位该id所对应的节点 var categorie = findcg(cid);//log(categorie); if (!categorie) return ; //设置categorie_id的 值 $eo('categorie_id').ele.value = cid ; //每个节点只管理其直接子节点,存在'sons'说明有子节点,创建一个下拉框并追加到尾部 if (categorie['sons']){ //清空创建的子select对象 var subCategories = categorie['sons']; $new_slt = $eo.create('select'); $new_slt.on('change',function(){ // this <-> $new_slt chcg(this); }); add_opt($new_slt.ele,'选择子分类','',0); add_opts($new_slt.ele,subCategories,1); // log($new_slt.ele.options); $eo(o).removeAfterAll().insertAfter($new_slt.ele); return $new_slt.ele ; }else { $eo(o).removeAfterAll(); } } function add_opt(slt_obj,opt_txt,opt_value,index){ slt_obj.options[index] = new Option(opt_txt,opt_value); } function find_opt(slt_obj,opt_value){ var len = slt_obj.options.length; for (var i=0; i < len; i++) if (slt_obj.options[i].value == opt_value) return slt_obj.options[i] ; } function clear_opts(slt_obj){ // 原有选项计数 var len = slt_obj.options.length; for (var i=0; i < len; i++) slt_obj.options[0] = null;// 移除当前选项 } function add_opts(slt_obj,categories,start,slted_value,callback){ if (slt_obj && slt_obj['options'] && xu.verify._obj(categories)){ clear_opts(slt_obj); //清除原 add_opt(slt_obj,'选择子分类','',0); var start = start || 1 ;// 选项计数 xu.array.each(categories,function(item){ add_opt(slt_obj,item.name,item.id,start); start ++ ; }); var opt = find_opt(slt_obj,slted_value); if (opt){ opt.selected = true ; } } } function trigger_opt(slt_obj,slted_value,callback){ //触发事件 var opt = find_opt(slt_obj,slted_value); if (opt){ opt.selected = true ; return chcg(slt_obj);//log("选中的opt: ",opt); } } xu.ready(function(){ //设置分类的项 -- 首先设置初值项,取第一级分类 (function(){ if (!xu.verify._obj(json__categories)) { chcg = function(){} ;return ; } //构建顶级分类,然后根据选择构建子级的slt<向右> add_opts($eo('categorie').ele,json__categories['tree'],1); //文章修改模式 先构建自身slt,然后构建父级的slt<向左> if ($eo('categorie_id').ele.value && (this_ctg = findcg($eo('categorie_id').ele.value))){ //查当前节点的父节点 var up_ctgs = [] ; do { up_ctgs.push(this_ctg);//从里到外,级别递增 this_ctg = findcg(this_ctg['parent_id']); }while(this_ctg) ; // 数组长度>1,不处于顶级;<=1,处于顶级 var slt_obj = $eo('categorie').ele ; do { var item = up_ctgs.pop(); slt_obj = (item) ? trigger_opt(slt_obj,item.id) : null; }while(slt_obj) ; } })(); });
2 楼
vb2005xu
2009-12-21
var callback = (callback && xu.verify._func(callback))? callback : function(){} ;
1 楼
vb2005xu
2009-12-21
修正版,解决所有可能出现的问题:
var json__categories = <?php echo $json__categories; ?> ; //log(json__categories); //查找分类 function findcg(id){ var cg = null , hadFind = false; xu.array.each(json__categories['refs'],function(item,index){ if (hadFind) return ; if (item.id == id) cg = item ; }); return cg ; } //改变分类 function chcg(o){ // o -> select if (!xu.verify._obj(o)) return ; //首先取得选中的id,,再查该id下是否存在子节点 var cid = o.value;//log(cid); if (!cid) { // 缺省值时清空节点尾部所有select $eo(o).removeAfterAll(); //设置categorie_id的 值,向左找相邻的且选中的分类项 var previousSlt = o.previousSibling; if (!previousSlt){ $eo('categorie_id').ele.value = null ; }else { $eo('categorie_id').ele.value = previousSlt.options[previousSlt.selectedIndex].value ; } // log($eo('categorie_id').ele.value); return ; } //在json中定位该id所对应的节点 var categorie = findcg(cid);//log(categorie); if (!categorie) return ; //设置categorie_id的 值 $eo('categorie_id').ele.value = cid ; // log('选择的文章分类: ' , $eo('categorie_id').ele.value); //每个节点只管理其直接子节点,存在'sons'说明有子节点,创建一个下拉框并追加到尾部 if (categorie['sons']){ //清空创建的子select对象 var subCategories = categorie['sons']; $new_slt = $eo.create('select'); $new_slt.on('change',function(){ // this <-> $new_slt chcg(this); }); add_opt($new_slt.ele,'选择子分类','',0); add_opts($new_slt.ele,subCategories,1); // log($new_slt.ele.options); $eo(o).removeAfterAll().insertAfter($new_slt.ele); return $new_slt.ele ; }else { $eo(o).removeAfterAll(); } } function add_opt(slt_obj,opt_txt,opt_value,index,slted){ slt_obj.options[index] = new Option(opt_txt,opt_value); var slted = slted || false; if (slted){ slt_obj.options[index].selected = slted ; return slt_obj.options[index] ; } } function find_opt(slt_obj,opt_value){ var len = slt_obj.options.length; for (var i=0; i < len; i++) if (slt_obj.options[i].value == opt_value) return slt_obj.options[i] ; } function clear_opts(slt_obj){ // 原有选项计数 var len = slt_obj.options.length; for (var i=0; i < len; i++) slt_obj.options[0] = null;// 移除当前选项 } function add_opts(slt_obj,categories,start,slted_value,callback){ if (slt_obj && slt_obj['options'] && xu.verify._obj(categories)){ clear_opts(slt_obj); //清除原 add_opt(slt_obj,'选择子分类','',0); var start = start || 1 ;// 选项计数 var callback = callback || function(){} ; xu.array.each(categories,function(item){ var opt = add_opt(slt_obj,item.name,item.id,start,slted_value == item.id); if (opt){ callback(slt_obj); } start ++ ; }); } } function trigger_opt(slt_obj,slted_value){ //触发事件 var opt = find_opt(slt_obj,slted_value); if (opt){ opt.selected = true ; return chcg(slt_obj);//log("选中的opt: ",opt); } } xu.ready(function(){ //设置分类的项 -- 首先设置初值项,取第一级分类 (function(){ if (!xu.verify._obj(json__categories)) { chcg = function(){} ;return ; } //构建顶级分类,然后根据选择构建子级的slt<向右> add_opts($eo('categorie').ele,json__categories['tree'],1); //文章修改模式 先构建自身slt,然后构建父级的slt<向左> if ($eo('categorie_id').ele.value && (current_categorie = findcg($eo('categorie_id').ele.value))){ //查当前节点的父节点 var parent_categories = [] ; var parent_categorie = findcg(current_categorie['parent_id']); while(parent_categorie) { parent_categories.push(parent_categorie);//从里到外,级别递增 parent_categorie = findcg(parent_categorie['parent_id']); } // 数组长度>0,不处于顶级;<0,处于顶级 var item = (parent_categories.length) ? parent_categories.pop() : current_categorie; var slt_obj = trigger_opt($eo('categorie').ele,item.id); if (slt_obj){//不处于顶级,触发事件会返回新建的slt对象 while((item = parent_categories.pop())){ slt_obj = trigger_opt(slt_obj,item.id); } //选中自身 trigger_opt(slt_obj,current_categorie.id); } } })(); });
发表评论
-
常用的 js 代码梳理
2016-06-16 12:00 1929/** * 格式化时间函数 * @param {form ... -
fineuploader 跨子域上传文件 cookie丢失问题的解决
2015-10-14 13:30 4819目前的项目中,使用到了fineuploader 这个纯htm ... -
2014 I Love You!
2014-02-14 15:40 1275保存成 html文件后打开 写道 <html> ... -
阻止checkbox的父元素事件冒泡
2014-01-15 20:33 8745今天在开发后台权限管理时使用了tinyaccordion ... -
整理下之前的js代码 moogens.js 记录下
2013-11-26 11:49 1213moogens.jshttps://github.com/v ... -
AOP 在js中的应用
2013-08-29 19:21 0http://www.alloyteam.com/2013/ ... -
自己动手增强 jquery.multiselect2side 调用
2012-11-13 17:50 8643最近用到一个jq插件 jquery.multiselect ... -
坑爹的HTML5应用集锦
2012-11-06 16:23 12521. 3D的俄罗斯方块 http://alteredquali ... -
小旭改的分页代码
2012-10-22 15:54 1354/** * 说明: 在页面指定元素中构建分页条 * ... -
一道js题 的分析历程
2012-08-10 11:14 1322var a = {n:1};a.x=a={n:2}; a.x ... -
修复 artDialog 双击遮罩层就会自动关闭的bug.... 自己动手....
2012-05-24 21:21 6092今天使用的时候发现 双击遮罩层 就会自动关闭 ,我用的版本是 ... -
jquery 也不给力啊 unbind 你让我情何以堪!
2012-05-09 19:36 1532发现一个问题$a = jQuery('img[src=&q ... -
使用 nodejs 形式的语法来规整 js
2012-04-21 10:20 1999/* * 使用 nodejs 形式的语法来规整 js ... -
注册了2个域名 希望能给nodejs一点集合
2011-06-22 12:37 1336NODEJS-OPEN.COM NODEJS-OPEN.I ... -
css 文本折行
2011-05-12 10:27 8379word-wrap:break-word; overflow: ... -
IE 中document.getElementsByName
2011-05-06 10:40 2455IE 中使用 document.getElementsByNa ... -
新年里 把 自己写的 js基础代码 做个了结..... 死机了吧,悲剧了吧 ... 打不开了吧...编辑器bug出现了吧 ff不能黏贴,复制,换组织就不修正么?
2011-02-11 20:28 1780新年里 把 自己写的 js基础代码 做个了结..... 死机了 ... -
考考你们的JS 我只作对了一半 你们试试
2011-02-11 10:40 2186alert(typeof(NaN)); alert( ... -
为自己的JS库 moogens 增加 facebox 组件
2011-01-17 20:16 2092之前的JS慢慢积累下来慢慢也就自己完善了个,比之前的__ini ... -
高级js教程,转国外一个教程
2010-11-22 10:10 3392http://www.sergiopereira.com/ar ...
相关推荐
以下是一个基于JavaScript和XML实现级联下拉框的详细步骤: 首先,我们需要一个XML文件来存储级联数据,例如`regions.xml`。这个文件包含省份和城市的数据,结构如下: ```xml 省份1"> 城市11"/> 城市12"/> ...
这个例子中的"php框架thinkphp实现js(ajax)无限添加级联下拉框"是关于如何利用ThinkPHP和JavaScript(AJAX)技术来创建一个动态的、可以无限级联的下拉菜单系统。下面我们将深入探讨这一主题。 1. **ThinkPHP框架...
实现级联下拉框效果,我们通常需要两个或多个`<select>`元素,并通过JavaScript监听第一个下拉框的`change`事件。当用户更改选择时,触发事件处理函数,根据选定的值动态更新第二个下拉框的选项。 以下是一个简单的...
"好用简单的可编辑级联下拉框"就是一个旨在提升用户体验的组件,它将传统的静态下拉框与级联选择功能相结合,并引入了编辑能力,使得用户在选择过程中能够更加灵活和高效。 首先,我们要理解什么是“可编辑下拉框”...
在Android开发中,有时我们需要实现一个城市级联选择的功能,比如选择省份后,根据省份自动更新市、区的选项。这种效果通常通过自定义Spinner来完成。Spinner是Android中的一个下拉选择控件,它提供了用户友好的交互...
当用户在第一个下拉框中选择一个选项时,通过JavaScript事件监听器触发一个函数,该函数根据所选值动态生成并插入第二个下拉框的选项。这可能涉及到查找特定的DOM节点,创建新的`<option>`元素,并将它们添加到第二...
在Excel中,级联下拉框是一种非常实用的功能,它允许用户在选择一个选项后,根据该选项自动显示相关的次级选项。这种交互方式在数据输入时能够保持数据的一致性和准确性,尤其适用于多级分类的数据管理。在本教程中...
级联下拉框是一种常见的UI组件,它允许用户在一个下拉框的选择基础上动态加载并显示另一个相关的下拉框,这种联动效果在数据筛选、地区选择等场景中非常常见。 1. HTML基础: HTML(HyperText Markup Language)...
3. 递归级联:为了实现无限级联,我们需要在填充完一个下拉框后,监听这个新下拉框的改变事件,然后重复以上过程。这里的关键是确保每次级联都是基于当前下拉框的选中值,而不是最初的父级下拉框。 ```javascript ...
在IT领域,级联下拉框(Cascading Dropdown)是一种常见的用户界面设计,它用于在两个或更多下拉框之间建立关联关系。在这种设计中,一个下拉框的选项会根据用户在另一个下拉框中的选择动态更新。这种功能在数据筛选...
AJAX级联下拉框是一种常见的前端交互设计,它利用Ajax技术实现在用户选择一个下拉选项时,动态地更新另一个相关联的下拉框内容。这种功能在数据关联、筛选和表单填写中非常常见,例如省份和城市的选择,类别和子类别...
级联下拉框允许用户在一个下拉框中选择一个选项后,根据所选的选项动态更新另一个下拉框的选项。Ajax 技术可以实现这种功能,而无需每次更改时都重新加载整个页面,从而提高应用性能。 Ajax(Asynchronous ...
在本文中,我们将探讨如何使用jQuery实现级联下拉框的效果,这是一个常见的前端交互功能,常用于数据筛选和表单填写。级联下拉框允许用户在一个下拉框中做出选择后,根据所选内容动态更新下一个下拉框的选项。这种...
2. **级联下拉框**: 级联下拉框是一种交互设计,它允许用户在一个下拉框的选择基础上,打开另一个相关的下拉框,形成一种递进的筛选过程。例如,用户先选择城市,接着在选择的城市基础上展示相应的商圈或者类别。...
layui的插件效果,优化基础layui的原装组件的效果。 layui 是一款采用自身模块规范...其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。
动态级联下拉框构件是一种常见的前端交互组件,主要用于实现多级联动选择的效果。在网页设计中,这种组件常用于地址选择、分类筛选等场景,用户在选择一级选项后,二级甚至多级相关的下拉框内容会随之更新,提供更...
要实现级联下拉框,我们需要监听第一个下拉框的`change`事件,并根据其值来填充第二个下拉框,同样的逻辑也应用于第二个下拉框与第三个下拉框之间。 在HTML结构中,通常每个下拉框会被赋予一个唯一的ID,以便在...
级联下拉框是一种常见的用户界面元素,常用于在网页或应用程序中提供多级选择功能。在.NET框架中,实现这种交互通常涉及到HTML、CSS、JavaScript(如jQuery)以及服务器端的技术,例如ASP.NET。本示例可能是一个...
在ASP.Net开发中,"省市地区 局部刷新 级联下拉框"是一个常见的需求,它涉及到前端用户界面的交互以及后端数据的动态加载。局部刷新技术可以提高用户体验,因为它仅更新页面的特定部分,而不是整个页面,这在处理...
内部为四级的级联下拉框,分别为省份,市,县及区和镇及街道四级下拉框;(适用任何语言的纯HTML)详细截图可访问:https://blog.csdn.net/weixin_43972758/article/details/86510419 进行查询。