深入学习jquery源码之查询选择插件的实现

2023-11-08

深入学习jquery源码之上传查询选择插件的实现

;(function($){
	var defaults = {
			url : "",
			fieldCode: "",
			multi : false,
			area: ['40%','80%'],
			code:['code','name'] 	 //注意顺序,先是code,再是name
	};
	
	function renderSelector(options){
		debugger;
		this.settings = $.extend({},defaults,options);
		var $domObj = $("#" + this.settings.fieldCode + "-popSelector");
		this.settings.url = $domObj.attr("action") ? $domObj.attr("action") : this.settings.url;
		this.settings.multi = $domObj.attr("multi") ? $domObj.attr("multi") : this.settings.multi;
		this.settings.code = $domObj.attr("codeAndName") ? $domObj.attr("codeAndName").split(",") : this.settings.code;
		this.init();
	}
	
	//为函数添加原型链上的方法
	renderSelector.prototype = {
		init: function(){
			debugger;
			var _self = this,
				_keys = _self.settings.code;
			
			
			$("input[name='" + _keys[0] +"']").parent().parent().find("button").unbind('click').bind('click', function(){
				var action = "_self." + $(this).attr("action");
				eval(action);
			});
		},
		querySelect : function(thi,event){
			var param=$("#" + this.settings.fieldCode + "-popSelector").find("input[type='hidden']").val();
			var _self = this;
			var url = "";
			var urlParam=_self.settings.url;
			if(urlParam.indexOf("?") != -1 ){
				url=CONTEXT_PATH + urlParam+"&ids="+param;
			}else{
				url = CONTEXT_PATH + urlParam+"?ids="+param;
			}
			var layIndex = layer.open({
	        	type: LayuiPopStyle.LAYUI_IFRAME_LAYER,
	        	title: "查询选择",
	        	maxmin: false,
				shadeClose: false, 				//开启遮罩关闭
	        	area: _self.settings.area,
	        	btn: ['确认', '取消'],
	        	content: url,
	        	success: function(layero){
	        	},
	        	yes: function(index, layero){	//如果设定了yes回调,需进行手工关闭
	        		//当点击‘确定’按钮的时候,获取弹出层返回的值
	        		var dataArr = window["layui-layer-iframe" + index].querySelectCallbackData();
	        		
	        		if(dataArr.length == 0){
	        			layer.msg("只能选择数据...", {icon: 5});
	        			return false;
	        		}
	        		
	        		if(!eval(_self.settings.multi) && dataArr.length > 1){  //默认单选
	        			layer.msg("只能选择一条数据...", {icon: 5});
	        			return false;
	        		}
	        		
	        		var _keys = _self.settings.code,
	        			code = "",
	        			name = "";
	        		    userId = "";
	        		if(!_self.settings.multi){
	        			code = dataArr[0]['code'];
	        			name = dataArr[0]['name'];
        			}else{
        				var _code = "",
        					_name = "";
        				    _userId="";
            			for(var i=0,len=dataArr.length; i<len; i++){
            				_code += dataArr[i]['code'] +",";
            				_name += dataArr[i]['name'] +",";
            				if(!$.isEmptyStr(dataArr[i]['userId']))
            				{
            					_userId += dataArr[i]['userId'] +",";
            				}
            			}
            			code = _code.substring(0,_code.length-1);
            			name = _name.substring(0,_name.length-1);
            			if(_userId.length>1)
            			{
            			   userId += _userId.substring(0,_userId.length-1);
            			}
        			}
	        		
	        		//给input[name='']:text 赋值
	        		$("input[name='" + _keys[0] + "']:hidden").val(code);
	        		$("input[name='" + _keys[1] + "']:text").val(name);
	        		$("textarea[name='"+ _keys[1] + "']").val(name);
	        		if(!$.isEmptyStr())
	        		if(!$.isEmptyStr(userId))
	        		{
	        			$("input[name='orgUserId']:hidden").val(userId);
	        		}
	    		    layer.close(index); 
	    		},
	        	end: function(){		//销毁列表回调方法
	        	},
	        	cancel: function(){ 	//点击左上角关闭按钮回调方法
	        	}
	        	
	        });
			
		},
		clearSelect : function(){
			var _self = this,
				_keys = _self.settings.code;
			$("input[name='" + _keys[0] + "']:hidden").val("");
    		$("input[name='" + _keys[1] + "']:text").val("");
		}
	}
	
	//扩展jquery类方法
	$.extend({
		renderSelector : function(options){
			return new renderSelector(options);
		}
	});
	
})(jQuery)

如何使用

    renderSelector = $.renderSelectorMyf({
        fieldCode: "gfyId",
        url: "../../Security/selector/user/UserList.html?s=" + Math.random(),
        multi: false,
        code: "gfyId,gfyIdName",
        keyRespField: "gfyId,id",
        dictCode: "publicserviceName",
        area: ['90%','90%']
    });
	

    _self.renderSelectors = [renderSelector];

具体实现

html

	        <p align="left" id="gfyId-popSelector">用户名称:
	          <input name="gfyIdName" class="easyui-textbox" disabled style="width: 120px;">
	          <input type="hidden" name="gfyId">
              <button type="button" id="gfyButton" class="btn btn-info btn-sm" action="querySelect(this,event)">
                                    选择
              </button>
	          </p>

定义局部闭包,覆盖原有的覆盖方法实现数据加载

var _self = new View();
$(function () {
	
    _self.createCusView = function(){
        $("#WindowFire").combobox({
            url: _self.dicurl+'yesno'
        });

    }
    
    _self.init = function(){
    	_this = this;
    	
    	renderSelector = $.renderSelector({
            fieldCode: "gfyId",
            url: "../../Security/selector/user/UserList.html?s=" + Math.random(),
            multi: false,
            code: "gfyId,gfyIdName",
            keyRespField: "gfyId,id",
            dictCode: "publicserviceName",
            area: ['90%','90%']
        });
    	

    	_this.renderSelectors = [renderSelector];
        
        if (key&&key!="") {
            $.get("security/installapplyvo/getById/" + key, function (data) {
            	
                _this.getMainData = data;
                
                if($.util.request["type"] != "add" && _this.renderSelectors){
                	for(var i=0,len=_this.renderSelectors.length; i<len; i++){
                		var renderSelector = _this.renderSelectors[i],
                			dictDatas = $Core.DicCache.get(renderSelector.settings.dictCode);
                			renderSelector.echoSelect(data, dictDatas);
                	}
                }
      });

    
    _self.init();
    
    
;(function($){   
	
    var options = {
    		fieldCode: "gfyId",
            url: "../../Security/selector/user/UserList.html?s=" + Math.random(),
            multi: false,
            code: "gfyId,gfyIdName",
            keyRespField: "gfyId,id",
            dictCode: "publicserviceName",
            area: ['90%','90%']
    };
    /*引用查询选择*/
	function renderSelectorMy(options){
		
		var defaults = {};
		this.settings = $.extend({},defaults,options);
		var $domObj = $("#" + this.settings.fieldCode + "-popSelector");
		this.settings.url = $domObj.attr("action") ? $domObj.attr("action") : this.settings.url;
		this.settings.multi = $domObj.attr("multi") ? $domObj.attr("multi") : this.settings.multi;
		this.settings.code = $domObj.attr("codeAndName") ? $domObj.attr("codeAndName").split(",") : this.settings.code.split(",");
		this.settings.keyRespField = this.settings.keyRespField ? this.settings.keyRespField.split(",") : "";
		this.init();
	}
	
	//为函数添加原型链上的方法
	renderSelectorMy.prototype = {
		init: function(){
			
			var _self = this,
				_keys = _self.settings.code;
			
			$("input[name='" + _keys[0] +"']").parent().parent().find("button").unbind('click').bind('click', function(){
				var action = "_self." + $(this).attr("action");
				eval(action);
			});

		},
		querySelect : function(thi,event){
			
			var _self = this;
			var url = _self.settings.url;
			var _keys = _self.settings.code;
			var keyRespField = _self.settings.keyRespField;
			var id = keyRespField[1];
			var ids = $("input[name='" + _keys[0] +"']").val();

			if(url.indexOf("?") != -1) {
                url = url + "&" + id + "="+ids;
            }else {
                url = url + "?" + id + "="+ids;
			}
			$Core.UI.openDialog("selwind", url,
	            {
	                title: "列表选择",
	                width: _self.settings.area[0],
	                height: _self.settings.area[1],
	                onClose: function () {
	                }
	            });

			
		},
		echoSelect : function(_data){
			var _self = this;
			var data = _data.data,
				_keys = _self.settings.code,
				_rkeys = _self.settings.keyRespField,
				dictName = "",
				dictCode = _self.settings.dictCode;
			$Core.DicCache.initDictionary(dictCode,function(dicts){
				var _dicts = dicts;
				if(dicts && dicts.data){
					var dictDatas = dicts.data[dictCode];
					for(var i=0,len=dictDatas.length; i<len; i++){
						var item = dictDatas[i];
						if(data[_keys[0]] == item[_rkeys[1]]){
							var itemName = item.text;
							dictName += itemName +",";
						}
					}
					$("span input:text", $("div #" + _keys[0] + "-popSelector")).val(dictName.substr(0,dictName.length-1));
				}else{
					$("span input:text", $("div #" + _keys[0] + "-popSelector")).val(dictName);
				}
				
				
			})
		},
		selectResultAfterCallback: function(checkRlt){
			
			var _self = this,
				multi = _self.settings.multi;
			if(checkRlt.length == 0){
				$Core.UI.message.warning("选请选择数据!");
			}
			
			if(!multi && checkRlt.length != 1){
				$Core.UI.message.warning("单选,请选择一条数据!");
			}
			
			var _keys = _self.settings.code,
			code = "",
			name = "";
			if(!_self.settings.multi){
				code = checkRlt[0]['code'];
				name = checkRlt[0]['name'];
			}else{
				var _code = "",
					_name = "";
				for(var i=0,len=dataArr.length; i<len; i++){
					_code += checkRlt[i]['code'] +",";
					_name += checkRlt[i]['name'] +",";
				}
				code = _code.substring(0,_code.length-1);
				name = _name.substring(0,_name.length-1);
			}
		
			//给input[name='']:text 赋值
			address = checkRlt[0]['address'];
			headPerson = checkRlt[0]['headPerson'];
			headPersonPhone = checkRlt[0]['headPersonPhone'];
			customerType = checkRlt[0]['customerType'];
			$("input[name='address']").val(address);
			$("input[name='headPerson']").val(headPerson);
			$("input[name='headPersonPhone']").val(headPersonPhone);
			/*$("input[name='customerType']").val(customerType);*/
			$("#customerType").combobox("setValue", customerType);
			$("input[name='" + _keys[0] + "']:hidden").val(code);
			$("span input:text", $("div #" + _keys[0] + "-popSelector")).val(name);
			
			$(".panel-tool-close").trigger('click');
		}
		
	}	
	
	  //扩展jquery类方法
	$.extend({
		renderSelectorMyf : function(options){
			return new renderSelectorMy(options);
		}
	});
})(jQuery)
	
    renderSelector = $.renderSelectorMyf({
        fieldCode: "gfyId",
        url: "../../Security/selector/user/UserList.html?s=" + Math.random(),
        multi: false,
        code: "gfyId,gfyIdName",
        keyRespField: "gfyId,id",
        dictCode: "publicserviceName",
        area: ['90%','90%']
    });
	

    _self.renderSelectors = [renderSelector];

 
});

​

调用的查询选择页面

UserList.html

var _self = new CntenListView();
$(function () {
    var columns = [
        {field:'ck',checkbox:true},
        {field:'id',hidden:true},
        {field:'userCode',title:'用户编码',align:'center',width:100},
        {field:'userName',title:'用户名称',align:'center',width:140},
        {field:'headPerson',title:'负责人',align:'center',width:90},
        {field:'headPersonPhone',title:'负责人电话',align:'center',width:120}
    ];
    _self.listOption.idKey = "id";
    _self.listOption.columns = columns;
    _self.listOption.url = "security/publicservicesuser";
    _self.listOption.formurl = "";
    _self.listOption.dictCodes = "customerType,yesno";
    _self.listOption.searchform = "search_form";
    _self.cusButtonEvents = function(){

    };
    _self.createCusView = function(){

    };
    

    _self.initControl = function () {
        var $btnQuery = $("#btnquery");
        $("#dglist").datagrid({
        	url: _self.listOption.url+'/query',
            checkOnSelect:true,
            columns:[_self.listOption.columns],
            idField: _self.listOption.idKey,
            onBeforeLoad: function (paras) {
                var v = $Core.util.QueryFormSerializeString('search_form');
                	v = v.replace('orgDataCode','marketingDepartment');
                paras.querystr = v;
            },
            onLoadSuccess: function () {
                $btnQuery.find("span").text("查询");
                $btnQuery.removeAttr("disabled", "disabled");
                $btnQuery.find("i").attr("class", "glyphicon glyphicon-search");
            },
            onLoadError: function () {
                $btnQuery.find("span").text("查询");
                $btnQuery.removeAttr("disabled", "disabled");
                $btnQuery.find("i").attr("class", "glyphicon glyphicon-search");
            }
        });
    }
    
    $("#btnConfirm").bind('click',function(){
        var $dg = $("#dglist");
        var rows = $dg.datagrid("getSelections");
        var renderSelectObj = parent.renderSelector;
        renderSelectObj.selectResultAfterCallback(rows);
        $('.panel-tool-close', parent.document).each(function (j, k) {
            k.click();
        });
	});
    
    _self.init();
});

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入学习jquery源码之查询选择插件的实现 的相关文章

  • 深入学习jquery源码之trigger()与triggerHandler()

    深入学习jquery源码之trigger 与triggerHandler trigger type data 概述 在每一个匹配的元素上触发某类事件 这个函数也会导致浏览器同名的默认行为的执行 比如 如果用trigger 触发一个 subm
  • 深入学习jquery源码之before()和after()

    深入学习jquery源码之before 和after after content fn 概述 在每个匹配的元素之后插入内容 参数 content String Element jQuery 插入到每个目标后的内容 function Func
  • 深入学习jquery源码之map()

    概述 将一组元素转换成其他数组 不论是否是元素数组 你可以用这个函数来建立一个列表 不论是值 属性还是CSS样式 或者其他特别形式 这都可以用 map 来方便的建立 参数 callback 给每个元素执行的函数 把form中的每个input
  • 深入学习jquery源码之Deferred对象与holdReady()

    深入学习jquery源码之Deferred对象与holdReady jQuery的Deferred对象也有resolve reject then方法 还有done fail always 方法 jQuery就是用这个Deferred对象来注
  • 深入学习jquery源码之jQuery的构造函数与实例化

    深入学习jquery源码之jQuery的构造函数与实例化 创建jQuery对象的整个流程如下 1 调用 方法 2 调用jQuery prototype init 构造函数 3 根据选择器不同返回不同的jQuery对象 4 不同jQuery对
  • 深入学习jquery源码之jQuery的选择器引擎Sizzle(一)

    深入学习jquery源码之jQuery的选择器引擎Sizzle Sizzle是一个纯javascript CSS选择器引擎 jquery1 3开始使用sizzle Sizzle一反传统采取了相反的Right To Left的查询匹配方式 效
  • 深入学习jquery源码之弹出框插件实现

    深入学习jquery源码之弹出框设计 jquery自带的提示框 messager confirm 提示 您确定通过吗 function r if r 弹出框插件 function window undefined var COOKIE US
  • 深入学习jquery源码之is()与not()

    深入学习jquery源码之is 与not is expr obj ele fn 概述 根据选择器 DOM元素或 jQuery 对象来检测匹配元素集合 如果其中至少有一个元素符合这个给定的表达式就返回true 如果没有元素符合 或者表达式无效
  • 深入学习jquery源码之attr()与removeAttr()

    深入学习jquery源码之attr 与removeAttr attr name properties key value fn 概述 设置或返回被选元素的属性值 参数 name String 属性名称 properties Map 作为属性
  • 深入学习jquery源码之noConflict()

    深入学习jquery源码之noConflict jQuery noConflict extreme 概述 运行这个函数将变量 的控制权让渡给第一个实现它的那个库 执行 var jq noConflict 后 将不再控制当前的jQuery 而
  • 深入学习jquery源码之empty()与返回值remove()

    深入学习jquery源码之empty 与返回值remove empty 概述 删除匹配的元素集合中所有的子节点 把所有段落的子元素 包括文本节点 删除 p Hello span Person span a href and person a
  • 深入学习jquery源码之查询选择插件的实现

    深入学习jquery源码之上传查询选择插件的实现 function var defaults url fieldCode multi false area 40 80 code code name 注意顺序 先是code 再是name fu
  • 深入学习jquery源码之wrap()和wrapAll()

    深入学习jquery源码之wrap 和wrapAll wrap html element fn 概述 把所有匹配的元素用其他元素的结构化标记包裹起来 这种包装对于在文档中插入额外的结构化标记最有用 而且它不会破坏原始文档的语义品质 这个函数
  • 深入学习jquery源码之获取url中参数插件

    深入学习jquery源码之获取url中参数插件 function window undefined 定义 通用工具方法 扩展对象基元 coreUtil function return Object apply this arguments
  • 深入学习jquery源码之each()

    each 遍历一个数组或对象 可以是DOM json等格式 等价于for循环 返回值 jQuery each callback 参数 对于每个匹配的元素所要执行的函数 概述 以每一个匹配的元素作为上下文来执行一个函数 意味着 每次执行传递进
  • 深入学习jquery源码之append()和prepend()

    深入学习jquery源码之append 和prepend append content fn 概述 向每个匹配的元素内部追加内容 这个操作与对指定的元素执行appendChild方法 将它们添加到文档中的情况类似 参数 content St
  • 深入学习jquery源码之isFunction()和isPlainObject()

    深入学习jquery源码之isFunction 和isPlainObject isArray obj 概述 测试对象是否为数组 参数 obj Object 用于测试是否为数组的对象 b append isArray b true b isF
  • 深入学习jquery源码之html()与text()和val()

    深入学习jquery源码之html 与text 和val html val fn 概述 取得第一个匹配元素的html内容 这个函数不能用于XML文档 但可以用于XHTML文档 在一个 HTML 文档中 我们可以使用 html 方法来获取任意
  • 深入学习jquery源码之data()

    深入学习jquery源码之data jQuery data element key value 概述 在元素上存放数据 返回jQuery对象 注意 这是一个底层方法 你应当使用 data 来代替 此方法在jQuery 1 8中删除 但你仍然
  • 深入学习jquery源码之addClass()和toggleClass()与hasClass()

    深入学习jquery源码之addClass 和toggleClass 与hasClass addClass class fn 概述 为每个匹配的元素添加指定的类名 参数 class String 一个或多个要添加到元素中的CSS类名 请用空

随机推荐

  • 将数组一次性拷贝到vector的一种方法

    主要是利用vector reserve vector resize和memcpy或者assign这几个函数 stl容器中size resize reserve capacity 为两对对应接口 vector为保持高速随机访问 采用连续内存分
  • 【翠花学Maven】Maven详解

    Maven的作用和定义 定义 Maven是一个跨平台的项目管理工具 是Apache组织中的一个颇为成功的开源项目 Maven主要服务基于java的项目构建 项目信息管理和依赖管理 作用 1 Maven可以创建项目 2 Maven可以引入依赖
  • 2016年蓝桥杯 —— 第十题

    最大比例 X星球的某个大奖赛设了M级奖励 每个级别的奖金是一个正整数 并且 相邻的两个级别间的比例是个固定值 也就是说 所有级别的奖金数构成了一个等比数列 比如 16 24 36 54 其等比值为 3 2 现在 我们随机调查了一些获奖者的奖
  • python解决一元二次方程

    题目 求一元二次方程ax x b x c 0的解 从键盘输入a b c的值 分多种情况输出解 a等于0 b也等于0时 输出 方程无解 a等于0 b不等于0时 输出 方程有1个解 x 表示方程的解 a不等于0时 计算判别式d b b 4 a
  • Java启动参数、调优及分析

    java启动参数共分为三类 其一是标准参数 所有的JVM实现都必须实现这些参数的功能 而且向后兼容 其二是非标准参数 X 默认jvm实现这些参数的功能 但是并不保证所有jvm实现都满足 且不保证向后兼容 其三是非Stable参数 XX 此类
  • Linux系统运维常见面试题汇总

    一 填空题 1 在Linux 系统 中 以文件方式访问设备 2 Linux 内核引导时 从文件 etc fstab中读取要加载的文件系统 3 Linux 文件系统中每个文件用indoe节点来标识 4 全部磁盘块由四个部分组成 分别为引导块
  • 心态:晋升的为什么不是你--架构师之道

    2011年底的时候 在网上看了一篇文章 能让你少奋斗10年的工作经验 其中大部分条目与工作态度相关 有实例 可操作 故有此感慨 职场纵横 如果下面8条 你也符合部分状态 或许 这就是 晋升的为什么不是你 的答案了 一 心灵停留在舒适区是不可
  • 第二章——递归

    递归的定义 递归算法 递归模型 递归栈 递归树 在数学和计算机科学中 递归是指在在一个过程或函数的定义时出现调用本过程或本函数的成分 若在函数中调用函数自身或者在过程的子部分中调用子部分自身的内容 称之为直接递归 又称自递归 若不同的函数和
  • mock静态方法指引

    mock静态方法指引 mockito 在3 4 0版本开始支持mock static method 文档 https wttech blog blog 2020 mocking static methods made possible in
  • 爬取实时航班信息 - 从航班信息网站获取实时航班信息

    目录 1 选择目标航班信息网站 2 分析网站结构 3 准备工具和库 4 编写爬虫程序
  • 软件测试功能到自动化学习路线图,2022年最新版技术栈

    2022年全新版软件测试技术栈 零基础入行必备 高质量免费在线课程 笔记 讲义分享 适合零基础 功能测试 即将面试回顾知识点的各位伙伴 文章目录 前言 第一阶段 功能测试 1 软件测试入门到精通 2 Linux系统2天快速入门 3 软件测试
  • L2-001紧急救援_最短路径

    PTA 程序设计类实验辅助教学平台千名教师建设 万道高质量题目 百万用户拼题的程序设计实验辅助教学平台https pintia cn problem sets 994805046380707840 problems 994805073643
  • spyder使用过程记录

    Ctrl F5 以Debug模式运行文件 在debug之前记得用 reset 指令清空一下ipython工作空间中的变量 以免影响debug中变量值的查看 无论你是否打断点 都会在第一行语句执行之前中断一次 python语句 可以在pdb提
  • Blender学习笔记(建模#2:线操作)

    建模 2 线操作 x ray模式 边操作 1 边的细分 基本同面一样 2 边的滑移 3 溶解 dissolve 4 倒角 5 环切 6 循环边 7 并排边 8 循环面 9 切变 10 法相切割 11 偏移边线并滑移 12 桥接循环边 13
  • 2020年高教社杯全国大学生数学建模竞赛 C题思路

    2020年高教社杯全国大学生数学建模竞赛 C题 中小微企业的信贷决策 本文旨在为广大热爱建模的朋友们提供2020年数学建模C题的思路和解法 问题回顾 在实际中 由于中小微企业规模相对较小 也缺少抵押资产 因此银行通常是依据信贷政策 企业的交
  • C运行时库(C Run-time Library)详解

    http blog csdn net wqvbjhc article details 6612099
  • 网络安全应急响应是什么?需要做什么?

    在网络安全体系中 我们除了要了解渗透测试 代码审计 风险评估 等级保护外 应急响应也是非常重要的部分 那么什么是应急响应 网络安全应急响应需要做什么 以下是具体的内容介绍 什么是应急响应 应急响应是指组织为了应对突发事件或重大信息安全事件的
  • 【LeetCode刷题】145 二叉树的后序遍历 java

    题目 给你一棵二叉树的根节点 root 返回其节点值的 后序遍历 示例 方法一 递归 class Solution public List
  • Vite 基本配置及原理

    Vite 基本配置及原理 介绍 vite config js optimizeDeps exclude 不同环境的 vite 配置 css配置 Vite 对 css 的处理 Vite 对 cssmodule 的处理和配置 Vite 对预处理
  • 深入学习jquery源码之查询选择插件的实现

    深入学习jquery源码之上传查询选择插件的实现 function var defaults url fieldCode multi false area 40 80 code code name 注意顺序 先是code 再是name fu