easyui combobox篩選顯示值 用loadFilter方法
阿新 • • 發佈:2019-02-17
由於工作需要,需要建立一個combobox,篩選載入過來的值的一部分。。
新建一個如下的combobox,從url中獲取要顯示的內容。
<input type="text" name="cbb" id="cbb" class="easyui-combobox" data-options="url:'combobox_data.json'"/>
但是由於業務原因,我可能只想顯示json中的部分欄位。這個時候就需要loadFilter方法。
js程式碼如下,載入頁面的時候,獲取url中的值並且全部顯示。
但是我需要顯示其中的一部分,可以這樣。根據條件把data中不想要的值刪除,然後返回data。這樣就時去掉了自己不想要的東西。$(document).ready(function() { //載入機構列表 $.ui.combogrid.org(".org_id"); $("#cbb").combobox({ loadFilter:function(data){ return 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中的值。綜合如下:
這樣的話,可以直接再次呼叫loadFilter方法,如下:$(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; } });
$("#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;
}
});