`
JavaSam
  • 浏览: 957185 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ext js tree 带搜索(支持树枝节点和叶子节点)+ 大select(mutiple)

 
阅读更多
<%@page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@include file="/common/path_header.jsp" %>
<%@include file="/common/grid_header.jsp" %>
<%@include file="/common/ext_header.jsp" %>
<html>
    <head>
        <title>账户树</title>
		<script src="${path}/script/jquery/jquery.js" type="text/javascript"></script>
        <script type="text/javascript">
            var obj = window.dialogArguments;
        	var retVal = "";
        	var selectDept  = "";//当前被点击的部门
        	var singleSelect = obj.singleSelect;
        	var areadySelectusersName = obj.areadySelectusersName;//所有用户名
        	var areadySelectusersId = obj.areadySelectusersId;//所有用户id
        	var areadySelectusersEmail = obj.areadySelectusersEmail;//所有email
            //异步树节点数据请求
            var requestConfig = {
                url : obj.treeUrl,
                callback: function(options, success, response){
                    acctInfo = Ext.decode(response.responseText);
                    var acctTree = Ext.getCmp("acct-tree");
                    acctTree.root.appendChild(acctInfo);
                    acctTree.expandAll();
                }
            };
            Ext.Ajax.request(requestConfig);
            
            AcctPanel = function(){
                AcctPanel.superclass.constructor.call(this, {
                    id: 'acct-tree',
					checkModel:'cascade',
                    split: true,
                    header: false,
                    width: 280,
                    minSize: 175,
                    maxSize: 500,
                    collapsible: true,
                    margins: '0 0 5 5',
                    cmargins: '0 0 0 0',
                    rootVisible: false,
                    lines: false,
                    autoScroll: true,
                    animCollapse: false,
                    animate: false,
                    collapseMode: 'mini',
                    loader: new Ext.tree.TreeLoader({
                        preloadChildren: true,
                        clearOnLoad: false
                    }),
                    root: new Ext.tree.AsyncTreeNode({
                        text: 'Ext JS',
                        id: 'root',
                        expanded: true,
                        children: []
                    }),
                    collapseFirst: false,
                    listeners: {
						'click':function (node){
						    selectDept = node.text;
							jQuery.ajax({
					            url: path + '/productpool/findUserTreeAll.do',
					            type: "post",
					            data: {
					                deptids: node.id
					            },
					            dataType: "json",
					            success: function(d){
					                 var $select1 = jQuery("#select1");
					                 $select1.html("");//先清空已有数据
					                 jQuery.each(d.children,function (k,v){
					                     var uid = v.id;
					                     var uname = v.text;
					                     var option = jQuery('<option value="'+uid+'">'+uname+'</option>');
					                     option.attr("title",v.email);
						                 $select1.append(option);
					                 });
					            },
					            error: function(a, b, c){
									jQuery.ligerDialog.error(b);
					            }
					        });
						},
                        'checkchange': function(node, checked){
                            //树节点checked事件监听
                            //处理所有父节点
                            node.cascade(function(node){
                                node.attributes.checked = checked;
                                node.ui.checkbox.checked = checked;
								if(retVal.indexOf(node.id)<0)//去重复
								   retVal += node.id + "|" + node.text+",";
                                node.eachChild(function(child){
                                    child.ui.toggleCheck(checked);
                                    child.attributes.checked = checked;
                                    child.fireEvent('checkchange', child, checked);
                                });
                            });
                        }
                    }
                
                });
                
            };
            
            Ext.extend(AcctPanel, Ext.tree.TreePanel, {
                initComponent: function(){
                    this.hiddenPkgs = [];
                    Ext.apply(this, {
                        tbar: [' ', new Ext.form.TextField({
                            width: 200,
                            emptyText: '',
                            enableKeyEvents: true,
                            listeners: {
                                render: function(f){
                                    this.filter = new Ext.tree.TreeFilter(this, {
                                        clearBlank: true,
                                        autoClear: true
                                    });
                                },
                                keydown: {
                                    fn: this.filterTree,
                                    buffer: 350,
                                    scope: this
                                },
                                scope: this
                            }
                        }), ' ', ' '            
                        ]
                    })
                    AcctPanel.superclass.initComponent.call(this);
                },
                
                filterTree: function(t, e){
                    var text = t.getValue();
                    Ext.each(this.hiddenPkgs, function(n){
                        n.ui.show();
                    });
                    if (!text) {
                        this.filter.clear();
                        return;
                    }
                    this.expandAll();
                    
                    var re = new RegExp('^' + Ext.escapeRe(text), 'i');
                    this.filter.filterBy(function(n){
                        var textval = n.text; 
                        return !n.isLeaf() || re.test(n.text); 
                    });
                    
                    this.hiddenPkgs = [];
                    var me = this;
                    this.root.cascade(function(n){
                        if(!n.isLeaf()&& n.ui.ctNode.offsetHeight<3&& !re.test(n.text)){ 
			                n.ui.hide(); 
			                me.hiddenPkgs.push(n); 
			            } 
			            if(n.id!='root'){ 
			                if(!n.isLeaf() && n.ui.ctNode.offsetHeight >= 3 && me.hasChild(n,re)==false&& !re.test(n.text)){
			                    n.ui.hide(); 
			                    me.hiddenPkgs.push(n); 
			                } 
			            } 
                    });
                },
                hasChild :function (n,re){ 
		            var str=false; 
		            n.cascade(function(n1){ 
		                 if(re.test(n1.text)){ 
		                     str = true; 
		                     return; 
		                 } 
		             }); 
		             return str; 
		        },
                selectClass: function(cls){
                    if (cls) {
                        var parts = cls.split('.');
                        var last = parts.length - 1;
                        var res = [];
                        var pkg = [];
                        for (var i = 0; i < last; i++) { 
                            var p = parts[i];
                            var fc = p.charAt(0);
                            var staticCls = fc.toUpperCase() == fc;
                            if (p == 'Ext' || !staticCls) {
                                pkg.push(p);
                                res[i] = 'pkg-' + pkg.join('.');
                            }
                            else 
                                if (staticCls) {
                                    --last;
                                    res.splice(i, 1);
                                }
                        }
                        res[last] = cls;
                        
                        this.selectPath('/root/acctdocs/' + res.join('/'));
                    }
                }
            });
            Ext.onReady(function(){
                var acct = new AcctPanel();
                acct.on('click', function(node, e){
                    if (node.isLeaf()) {
                    }
                });
                acct.render("acctTree");
				jQuery(".x-panel-body-noheader").css("overflow","hidden");
				bindEvent();
				if(areadySelectusersName)
				   createOptions();//如果已经有选择的人员则自动添加已选人员
            });
            
           /**
           **生成option
           **/ 
           var areadyDept;
           function  createOptions (){
               areadyDept = true;//是否是带过来的
               var usersName = areadySelectusersName.split(",");
               var usersId = areadySelectusersId.split(",");
               var usersEmails = areadySelectusersEmail.split(",");
               jQuery.each(usersName,function (k,v){
					var $tmpOptions =  jQuery('<option value="'+usersId[k]+'">'+v+'</option>');
				    var email = usersEmails[k];
					$tmpOptions.attr("title",email);
					$tmpOptions.attr("class","isAready");//是带过来的
					$tmpOptions.appendTo('#select2');
               });
           }
            
            
            /**option点击事件**/
            function singleSel(srcEle){
                var hasOtherSelect = jQuery(srcEle).find("option:selected");
                if(hasOtherSelect.length>1){
                  //说明已经有其他选过的
                  var selectedOp = jQuery(srcEle).find("option:selected");
                  selectedOp.attr("selected",false);
                  jQuery(selectedOp[0]).attr("selected",true);
                  //alert("每个部门职能选择一个会签人!");
                }
            }
            /**验证是否已经添加过**/
            function validateRepeat(validateVal,destEle){
                if(singleSelect){
			       jQuery.each(destEle,function(k,v){
	            		if(jQuery.trim(jQuery(v).text()).indexOf(jQuery.trim(validateVal).substring(validateVal.indexOf("/")+1))>=0){
	            		   var txt = jQuery(v).text();
	            		   jQuery(v).text(txt.substring(0,txt.indexOf("/")>=0?txt.indexOf("/"):txt.length-1)).appendTo(jQuery('#select1'));//移除重复值
	            		   return false;
	            		}
	            	});
			    }else{
	            	jQuery.each(destEle,function(k,v){
	            		if(jQuery.trim(jQuery(v).text()) == jQuery.trim(validateVal)){
	            		   jQuery(v).remove();//移除重复值
	            		   return false;
	            		}
	            	});
			    }
            	return true;
            }
            
            //多选事件
            function bindEvent(){
	            jQuery('#confirm').click(function(){
					window.close();
				});
	            jQuery('#cancel').click(function(){
					var $options1 = jQuery('#select1 option');
					var $options2 = jQuery('#select2 option');
					$options1.remove();
					$options2.remove();
				});
				
	            jQuery('#add').click(function(){
					var $options = jQuery('#select1 option:selected');//获取当前选中的项
					var srcEleOp = jQuery('#select2 option');
					var $remove = $options.remove();//删除下拉列表中选中的项
					jQuery.each($options,function (k,v){
					    var thiz = $(v);
						var thizClass = thiz.attr("class");
						var thizId = thiz.attr("id");
						if("isAready" == thizClass)
						   selectDept  = thizId;
						var text = thiz.text()+"/"+selectDept;
						validateRepeat(text,jQuery('#select2 option'));//验证是否已经添加
						var $tmpOptions
						if("isAready" == thizClass){
					      $tmpOptions =  jQuery('<option class="isAready"  value="'+thiz.val()+'">'+text+'</option>');
					    }else{
						  $tmpOptions  =  jQuery('<option value="'+thiz.val()+'">'+text+'</option>');
					    }
					    var email = thiz.attr("title");
						$tmpOptions.attr("title",email);
						$tmpOptions.appendTo('#select2');
					});
				});
				
				jQuery('#remove').click(function(){
					var $removeOptions = jQuery('#select2 option:selected');
					var $remove = $removeOptions.remove();//删除下拉列表中选中的项
					jQuery.each($removeOptions,function (k,v){
					     var thiz = $(v);
					    var thizClass = thiz.attr("class");
						var text = thiz.text().substring(0,thiz.text().indexOf("/"));
						var text1 = thiz.text().substring(thiz.text().indexOf("/")+1);
						var $tmpOptions
					    if("isAready" == thizClass){
					      $tmpOptions =  jQuery('<option class="isAready" id="'+text1+'" value="'+thiz.val()+'">'+text+'</option>');
					      $tmpOptions.data("dep",text1);
					    }else{
						  $tmpOptions =  jQuery('<option value="'+thiz.val()+'">'+text+'</option>');
					    }
						var email = thiz.attr("title");
						$tmpOptions.attr("title",email);
						$tmpOptions.appendTo('#select1');
					});
				});
				
				jQuery('#addAll').click(function(){
					var $options = jQuery('#select1 option');
					var $remove = $options.remove();//删除下拉列表中选中的项
					jQuery.each($options,function (k,v){
					    var thiz = $(v);
					    var thizClass = thiz.attr("class");
						var thizId = thiz.attr("id");
						if("isAready" == thizClass)
						   selectDept  = thizId;
						var text = thiz.text()+"/"+selectDept;
						validateRepeat(text,jQuery('#select2 option'));//验证是否已经添加
						var $tmpOptions =  jQuery('<option value="'+thiz.val()+'">'+text+'</option>');
						var email = thiz.attr("title");
						$tmpOptions.attr("title",email);
						$tmpOptions.appendTo('#select2');
					});
				});
				
				jQuery('#removeAll').click(function(){
					var $options = jQuery('#select2 option');
					var $remove = $options.remove();//删除下拉列表中选中的项
					jQuery.each($options,function (k,v){
					    var thiz = $(v);
					    var thizClass = thiz.attr("class");
						var text = thiz.text().substring(0,thiz.text().indexOf("/"));
						var text1 = thiz.text().substring(thiz.text().indexOf("/")+1);
						var $tmpOptions
					    if("isAready" == thizClass){
					      $tmpOptions =  jQuery('<option class="isAready" id="'+text1+'" value="'+thiz.val()+'">'+text+'</option>');
					      $tmpOptions.data("dep",text1);
					    }else{
						  $tmpOptions =  jQuery('<option value="'+thiz.val()+'">'+text+'</option>');
					    }
						var email = thiz.attr("title");
						$tmpOptions.attr("title",email);
						$tmpOptions.appendTo('#select1');
					});
				});
				
				//双击事件
				jQuery('#select1').dblclick(function(){
					var $options = jQuery('option:selected', this);//注意此处“option”与“:”之间的空格,有空格是不可以的
					var $remove = $options.remove();//删除下拉列表中选中的项
					jQuery.each($options,function (k,v){
					    var thiz = $(v);
						var thizClass = thiz.attr("class");
						var thizId = thiz.attr("id");
						if("isAready" == thizClass)
						   selectDept  = thizId;
						var text = thiz.text()+"/"+selectDept;
						validateRepeat(text,jQuery('#select2 option'));//验证是否已经添加
						var $tmpOptions
						if("isAready" == thizClass){
					      $tmpOptions =  jQuery('<option class="isAready"  value="'+thiz.val()+'">'+text+'</option>');
					    }else{
						  $tmpOptions  =  jQuery('<option value="'+thiz.val()+'">'+text+'</option>');
					    }
					    var email = thiz.attr("title");
						$tmpOptions.attr("title",email);
						$tmpOptions.appendTo('#select2');
					});
				});
				//双击事件
				jQuery('#select1').click(function(){
				    if(singleSelect){
				       singleSel(this);
				    }
				});
				
				jQuery('#select2').dblclick(function(){
					var $options = jQuery('#select2 option:selected');
					var $remove = $options.remove();//删除下拉列表中选中的项
					jQuery.each($options,function (k,v){
					    var thiz = $(v);
					    var thizClass = thiz.attr("class");
						var text = thiz.text().substring(0,thiz.text().indexOf("/"));
						var text1 = thiz.text().substring(thiz.text().indexOf("/")+1);
						var $tmpOptions
					    if("isAready" == thizClass){
					      $tmpOptions =  jQuery('<option class="isAready" id="'+text1+'" value="'+thiz.val()+'">'+text+'</option>');
					      $tmpOptions.data("dep",text1);
					    }else{
						  $tmpOptions =  jQuery('<option value="'+thiz.val()+'">'+text+'</option>');
					    }
						var email = thiz.attr("title");
						$tmpOptions.attr("title",email);
						$tmpOptions.appendTo('#select1');
					});
				});
            }
            
            window.onbeforeunload = function (){
                    var mustSel = "法律部,合规部,清算部,风险控制部";//必选的四个部门
                    var $options = jQuery('#select2 option');//获取当前选中的项
                    var vFlag = 0;
					var ids = "";
					var names = "";
					var emails = "";
					jQuery.each($options,function (k,v){
					    var thiz = $(v);
					    var txt = thiz.text();
					    if(txt.indexOf("法律部")>=0||txt.indexOf("合规部")>=0||txt.indexOf("清算部")>=0||txt.indexOf("风险控制部")>=0){
					    	vFlag++;
					    }
					    ids += thiz.val()+",";
					    names += thiz.text()+",";
					    emails += thiz.attr("title")+",";
					});
					retVal += ids.substring(0,ids.length-1) + "|" + names.substring(0,names.length-1)+"|"+emails.substring(0,emails.length-1);
						window.returnValue = retVal;
					/*
					if(vFlag<4){
						alert(mustSel+"四个部门为必选部门,请您核对!");
						return false;
					}else{
					    retVal += ids.substring(0,ids.length-1) + "|" + names.substring(0,names.length-1)+"|"+emails.substring(0,emails.length-1);
						window.returnValue = retVal;
					}*/
            }
            //判断字符串是否重复
            function fun(str){
				var arrays = new Array();
				var flag = true;
				for(var i=0;i<str.length;i++){
					var temS = str.charAt(i);
					if(str.replace(temS,"").indexOf(temS) > -1){
						flag = false;
						break;
					}
					arrays.push(temS);
				}
				if(flag){
					str = arrays.sort().join("");
				}else{
					str = "";
				}
				alert(str);
		    }
        </script>
		<style>
			.x-tree-node-cb{
				margin-bottom:-7px;
			}
			select,option{
				border:3px solid lightblue;
				margin-left:15px;
				margin-top:15px;
			}
		</style>
    </head>
    <body>
	    <span class="spanbtn" style="cursor: pointer;" id="confirm"><img id="confirmImg" src="img/confirmBtn.jpg"/></span>
	    <span class="spanbtn" style="cursor: pointer;" id="cancel"><img id="cancelImg" src="img/cancelBtn.jpg"/></span>
        <div id="acctTree" style="float:left;">
        </div>
        <div class="multipleDiv" style="float:left;">
	    	<select multiple id="select1" style="width:150px;height:500px;float: left;">
	    	</select>
		    <div style="float: left;margin: 130px 0 0 10px;">
		    	<span class="spanbtn" style="cursor: pointer;" id="add"><img id="addImg" src="img/add.jpg"/></span><br>
		    	<span class="spanbtn" style="cursor: pointer;"  id="remove"><img id="removeImg" src="img/del.jpg"/></span><br>
		    	<span class="spanbtn" style="cursor: pointer;"  id="addAll"><img id="addAllImg" style="margin-left:5px;" src="img/addAll.jpg"/></span><br>
		    	<span class="spanbtn" style="cursor: pointer;"  id="removeAll"><img id="remoeAllImg" style="margin-left:3px;" src="img/delAll.jpg"/></span>
		    </div>
	    	<select multiple id="select2" style="width:150px;height:500px;float: left;">
	    	</select>
	    </div>
    </body>
</html>

 

0
0
分享到:
评论

相关推荐

    mutiple1数据集

    mutiple1数据集

    layui下拉多选,下拉选择多选

    在网页开发中,Layui 是一款非常流行的前端框架,它提供了丰富的组件和美观的界面设计,便于开发者构建用户友好的交互式应用。本话题主要关注的是Layui中的一个关键组件——下拉多选框(Multiple Select)。下面将...

    史上最全的ssd7数据库mutiple choice大集合

    在这个"史上最全的ssd7数据库mutiple choice大集合"中,我们看到了关于数据库管理系统的组成、完整性约束以及数据库自身必备组件的问题。以下是对这些知识点的详细解释: 1. **数据库管理系统的组成部分**: - ...

    Android-Mutiple-Select-Gallery:Android 多单图像选择库

    #Android-Mutiple-Select-Gallery Android-Mutiple-Select-Gallery Android 多/单图像选择库 ##是什么让它如此棒:这个库允许你为用户设置可选图像的数量。 特征: 单选 多选 ##如何使用:查看TextActivity.java ...

    MY101 BKG digital system mutiple threadhold

    "MY101 BKG digital system mutiple threadhold" 是一个与数字系统和多线程技术相关的项目。在这个项目中,我们关注的核心是利用Python语言实现的破片检测功能,并且这一过程是通过多线程来提升效率的。在Python编程...

    史上最全的ssd5 mutiple choice大集合

    SSD5,全称为Solid State Drive 5,是一款在信息技术领域广泛应用的固态硬盘型号,以其高速度、低延迟和高耐用性而受到赞誉。在这个“史上最全的ssd5 multiple choice大集合”中,我们可以期待一系列关于SSD5的多选...

    search-select-multiple:此字段插件允许过滤带有长选项列表的select_multiple字段

    该字段插件增加了过滤select_mutiple字段的选择列表选项的功能。 通过在搜索字段中输入搜索文本进行过滤。 另请参见兄弟字段插件 。 资料格式 此字段插件使用需要select_multiple字段类型。 无需字段插件即可按预期...

    mutiple_pie (8).zip

    mutiple_pie (8).zip

    ssd8 选择题 mutiple choice

    通常情况下,操作系统接收的数据会包括一些非用户可见的数据,如头部信息,所以A会比B大。 5. 题目未完整,但从上下文推测可能是在询问网络性能或协议的某个方面。通常,这样的问题可能会引出关于TCP/IP协议栈、丢...

    MY101 defect auto classify system mutiple threadhold

    Python作为系统的基础,提供了丰富的库和框架,如NumPy用于数值计算,Pandas用于数据处理,Scikit-learn用于机器学习算法实现,TensorFlow和PyTorch则为深度学习提供了强大的支持。利用这些工具,开发者可以高效地...

    selenium for mutiple

    Selenium还支持更复杂的功能,如处理JavaScript事件、模拟用户键盘和鼠标操作、处理窗口和弹出框、执行异步脚本等。通过这些功能,Selenium可以满足大部分Web应用自动化测试的需求。然而,为了构建完整的测试框架,...

    Mutiple View Geometry in computer vision

    《计算机视觉中的多视图几何》一书详细介绍了在计算机视觉领域中,通过多幅图像重建场景的三维结构和相机参数的基本理论和算法。为了深入理解这一主题,我们需要掌握一系列关键的知识点。 首先,标题中提到的“多...

    Checks your new mails from mutiple mail servers(yeah it work

    Checks your new mails from mutiple mail servers(yeah it works!!!!!). it switches tray icons on different states & displays the number of new messages (as msn messenger display messages) and plays a ...

    [全球最强截图工具]Techsmith Snagit 2014 12.0.0 Build 1001+注册机

    Techsmith Snagit 2014 12.0.0 (Build 1001) + Mutiple keygen + SerialNumbers 堪称是全球最先进最好用的截图工具。 这个版本界面酷极了,跟WIN8融合到淋漓尽致。

    Spring MVC Multiple File Upload example

    以上配置限制了上传文件的大小,防止过大文件导致服务器资源耗尽。 最后,我们可以通过添加`@ResponseBody`或重定向视图(如`"redirect:/success"`)来返回一个响应,告知用户文件上传的结果。 总结来说,Spring ...

    能让界面上的控件随窗口大小任意缩放的代码

    ### 让界面上的控件随...这种方法适用于多种类型的控件,如静态文本、列表视图、树视图等,极大地提高了用户界面的灵活性和适应性。此外,该方法还支持不同分辨率下的自适应显示,从而提升了应用程序的整体用户体验。

    matlab 计算multiple entropy 的程序

    利用matlab和C混合编程计算multiple entropy这一在生物医学信号处理中得到广泛应用的非线性参数。matlab版本可能会对C函数调用产生影响,请利用本地matlab编译*.cpp,之后调用msen,即可以计算multiple entropy

    ssd5 mutiple choice 绝对最全 选择题 一个不漏

    这些知识点对于理解和编写C++程序至关重要,包括文件I/O、预处理器操作以及面向对象编程中的构造函数和对象管理。熟悉这些概念可以帮助开发者编写出更加高效、安全的代码,并在相关考试或面试中表现出色。

    这段代码实现了基于 Redis 的分布式锁与解锁功能,支持多锁并发控制和强制加锁机制

    根据传入的 `key` 和 `expire` 参数进行加锁,支持两种模式:单锁和多锁。当 `mutiple` 为 1 时,执行单锁操作,使用 Redis 的 `set` 命令加锁,并确保操作的原子性。如果 `mutiple` 大于 1,启用多锁模式,利用 `...

Global site tag (gtag.js) - Google Analytics