easyui combobox的增加全選解決方案


    1、解決方案背景:

  項目中偶然需要用到easyui的combobox的組件,但是本組件自己沒有包含全選的api事件。搜索了一些解決方案,但是不是很符合,后來發現是因為所使用的版本不一致所導致的。項目中使用的1.5的版本,而網上大部分的解決方案都是采用的自定義onSelect的方案,自己動手試過,確實不能,因為1.5版本的組件,在自定義onSelect的函數觸發后,選擇 了全部的值賦值給當前的組件,在賦值的同時,又會自動的觸發onSelect的事件,會不斷的陷入死循環中去。后來自己決定重新實現解決方案,重新定義onClick的事件,此事件是在1.5版本之后才有效使用的,下面介紹實現的具體方案。

     2、實際解決方案:

     自己封裝AllCheckCombobox.js.源代碼如下所示:

/**
 *自己擴展easyui的 combobox,使其能夠有全選和反選的功能。
 **/
var AllCheckCombobox = (function (mod,selectId){
	
		var select = $("#"+selectId);
		/*
		 * combobox獲取data的函數,可以替換成動態后台ajax獲取,此處只是靜態數據模擬。
		 */
		var getData = function (){
			var data =[{"text":"長沙","value":"111"},{"text":"常德","value":"222"}];
			data.unshift({"text":"全選/反選","value":""});
			return data;
		};
		
		/*
		 * 擴展的核心函數之一,自己擴展combobox的onclick的函數,判斷是否是全選/反選 選項,
		 *  若果是 則選中全部的選項,否則,清空全部的選項
		 */
		var onclick = function (record){
			var valueField = select.combobox("options").valueField;
			if(!record[valueField]){
				var data = select.combobox("getData");
				var values = select.combobox("getValues");
				var selectVaues = [];
				if((data.length - 1) != values.length){
					data.reduce(function(prev, current, index, array){
						selectVaues.push(current[valueField]);
					},selectVaues);
				}else{
					selectVaues.push(record[valueField]);
				}
				select.combobox('setValues', selectVaues); 
			}
		};
	
		/*
		 * combobox的初始化函數,還可以自己設定一些其他的選項,可以參看easyui的官網。
		 */
		mod.initCombobox = function (){
			$('#'+selectId).combobox({
				valueField : 'value',
				textField : 'text',
				multiple : true,
				editable : false,
				panelHeight : 'auto',
				panelMaxHeight : 300,
				data : getData(),
				onClick:onclick,
				label : "城市 :",
				labelPosition : "before",
				labelAlign : 'right'
			});
		};
	return mod;
})(window.AllCheckCombobox || {},'select');

  具體的項目中的data 可以沖后台ajax獲取,在動態獲取到data數據后,自動的在最前面給增加一個"全選"的選項,擴展的onclick的事件,也是對當前的選擇的值進行判斷,得出的結果,來進行對當前的下拉框賦值操作。

    3、測試代碼:

<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 <meta charset="UTF-8">
 <title>測試頁面</title>
 <link rel="stylesheet" type="text/css"	href="easyui/themes/gray/easyui.css">
 <link rel="stylesheet" type="text/css"	href="easyui/themes/icon.css">
</head>
<body>
	<div id="panel" style="width:98%;padding:10px 10px;">
		<input id="select" style="width:20%;" value=""/>
	</div>
</body>
<script type="text/javascript" src="easyui/jquery.min.js"></script>
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="easyui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="AllCheckCombobox.js"></script>
<script type="text/javascript">
 	$(function(){
		AllCheckCombobox.initCombobox();
	});
</script>
</html>

   4、測試效果:

選擇全選的選項,就會自動的選擇下面的所有的值,獲取當前選中的值,可以使用easyui的combobox的getValues獲取。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM