1. 程式人生 > >easyui combobox篩選顯示值 用loadFilter方法

easyui combobox篩選顯示值 用loadFilter方法

由於工作需要,需要建立一個combobox,篩選載入過來的值的一部分。。

新建一個如下的combobox,從url中獲取要顯示的內容。

<input type="text" name="cbb" id="cbb" class="easyui-combobox" data-options="url:'combobox_data.json'"/>
但是由於業務原因,我可能只想顯示json中的部分欄位。這個時候就需要loadFilter方法。

js程式碼如下,載入頁面的時候,獲取url中的值並且全部顯示。

	$(document).ready(function() {
		//載入機構列表
		$.ui.combogrid.org(".org_id");
		$("#cbb").combobox({
			loadFilter:function(data){
			  return data;
			}
		});
	});
但是我需要顯示其中的一部分,可以這樣。根據條件把data中不想要的值刪除,然後返回data。這樣就時去掉了自己不想要的東西。
$(document).ready(function(){
	$("#cbb").combobox({
		loadFilter:function(data){
			for(var i in data){
				if(data[i].value == "1"){
					data.splice(i,1);
				}
			}
			return data;
	});
});
splice() 方法可刪除從 index 處開始的零個或多個元素,並且用引數列表中宣告的一個或多個值來替換那些被刪除的元素。上面程式碼中刪除i處的元素。

因為combobox是放在彈出框,而且,根據功能的需求不同,需要同一個combobox顯示不同的下拉值。

這個時候,如果刪除的話,重複呼叫loadFilter的話,繼續用splice方法的話,等於是在已經缺少元素的data中繼續刪除。這樣就達不到想要的效果。

筆者在這個基礎上,想到刪除前賦值給另一個數組,結果以失敗告終,因為直接賦值,如下:

var data1 = data;
但是這樣的賦值,data1直接指向data指向的陣列,所以,如果data刪除的話,data1也是指向被刪除的元素。直接賦值就是淺拷貝,而淺拷貝的話,無法滿足陣列元素沒有改變的需求。

但是這樣的話,會提示我value不存在,後來發現,我應該在剛載入頁面的時候,就呼叫loadFilter方法先載入所有url中的值。綜合如下:

	$(document).ready(function() {
		//載入機構列表
		$.ui.combogrid.org(".org_id");
		$("#cbb").combobox({
			loadFilter:function(data){
			  return data;
			}
		});
	});
	$("#business_processe").combobox({
		loadFilter:function(data){
		var data1 = [];
		for(var i in data)
		{
			if(data[i].value==1)
			{
				data1.push(data[i]);
			}
			if(data[i].value==3)
			{
				data1.push(data[i]);
			}
		}
		return data1;
	  }  
	});
這樣的話,可以直接再次呼叫loadFilter方法,如下:
	$("#business_processe").combobox({
		loadFilter:function(data){
		var data1 = [];
		for(var i in data)
		{
                        //條件項的不同
                       if(data[i].value==4)
			{
				data1.push(data[i]);
			}
			if(data[i].value==6)
			{
				data1.push(data[i]);
			}
		}
		return data1;
	  }  
	});
後來經過同事指導,條件項可以簡化成如下:
						$("#business_processe").combobox({
								loadFilter:function(data){
								var data1 = [];
								for(var i in data)
								{
                                                                        //注意條件項的變化,-1 代表未匹配
                                                                       if("13".indexOf(data[i].value)>-1)
									{
										data1.push(data[i]);
									}
								}
								return data1;
							}
						});