Jquery combobox的使用總結----持續更新

最近一個項目要在下拉框中添加複選框,然後在這個過程中,發現越來越多的實現方法,在這裏記錄一下combobox。

文章最後我會貼一下代碼。

 

先貼一個實例,直接運行就是Jquery的複選框就可以出現了,這是最基本的功能。

function initCombobox(id){
	var value = "";
	// 加載下拉框複選框
	$('#'+id).combobox({
		panelHeight:'100',// 設置爲固定高度,combobox出現豎直滾動條,auto自適應
		multiple:true,// 設置多選
		// formatter方法就是實現了在每個下拉選項前面增加checkbox框的方法
		formatter: function (row) {//格式化選項,加載複選框
			var opts = $(this).combobox('options');
			return '<input type="checkbox" class="combobox-checkbox">' + row[opts.textField]
		},
		onLoadSuccess: function () {  // 下拉框數據加載成功調用
			var opts = $(this).combobox('options');
			var target = this;
			var values = $(target).combobox('getValues');// 獲取選中的值的values
			$.map(values, function (value) {
				var el = opts.finder.getEl(target, value);
				el.find('input.combobox-checkbox')._propAttr('checked', true);
			})
		},
		onSelect: function (row) { // 選中一個選項時調用
			var opts = $(this).combobox('options');
			// 獲取選中的值的values
			$("#"+id).val($(this).combobox('getValues'));
			// 設置選中值所對應的對應的複選框爲選中狀態
			var el = opts.finder.getEl(this, row[opts.valueField]);
			el.find('input.combobox-checkbox')._propAttr('checked', true);
		},
		onUnselect: function (row) {
			// 不選中一個選項時調用
			var opts = $(this).combobox('options');
			// 獲取選中的值的values
			$("#"+id).val($(this).combobox('getValues'));
			var el = opts.finder.getEl(this, row[opts.valueField]);
			el.find('input.combobox-checkbox')._propAttr('checked', false);
		}
	});
}

1.我們上述實例,調用了formatter屬性

$('#cc').combobox({
    formatter: function(row){
        var opts = $(this).combobox('options');
        return row[opts.textField];
    }
});

在這裏就要講一下row這個參數,這個參數是formatter自帶的,是代表了當前處理行的參數。

包括value,text,selected,disable。

value 就是傳給後臺的值,text就是顯示在頁面上的值,selected是代表選中,disable代表禁用。

取值和賦值的方式就是:

row.value
row.text
row.selected
row.disable

2.我們上述實例,調用了multiple屬性

true: 下拉框可以選多個

3.調用了panelHeight屬性:

auto: 高度自適應,比如你有100個,就會出現100個的高度

4.繼續其他屬性:

data:可以加載本地數據,即固定值。

filter:過濾器,可以過濾不顯示的數據,一般後臺就會處理這件事。q:用戶輸入的文本

$('#cc').combobox({
    filter: function(q, row){
        var opts = $(this).combobox('options');
        return row[opts.textField].indexOf(q) == 0;
    }
});

屬性大概常用就這些,說一下事件:

5.onBeforeLoad:在請求加載數據之前觸發,返回 false 則取消加載動作

// 比如權限不符合,可以返回false,不再加載數據。也可以在請求 後臺前的賦值

$('#cc').combobox({
    onBeforeLoad: function(param){
        param.id = 2;
        param.language = 'js';
    }
});

6.onLoadSuccess:當遠程數據加載成功時觸發

// 這個在上述實例中使用了

7.onLoadError:當遠程數據加載失敗時觸發

8.onSelect:當用戶選擇一個列表項時觸發

9.onUnselect:當用戶取消選擇一個列表項時觸發

這幾個事件都很重要,可以參照實例

下面是方法:

10.getData:返回加載的數據.比如你已經選中兩個了,調用方法返回的數據就是你現在選中的數據。注意是你選中了的!

11.loadData:加載數據,這個數據是你給的。

data可以是一行,也可以是多行。給個截圖參照下:

$('#cc').combobox('loadData', data);

12.reload:遠程獲取數據

$('#cc').combobox('reload');  // 請求原來的Url
$('#cc').combobox('reload','get_data.php');

13.setValue / setValues:設置組合框的值

$('#cc').combobox('setValues', ['001','002']);
$('#cc').combobox('setValue', '001');

14.clear:清空

$('#'+id).combobox("clear");

15.select / unselect 設置選中/取消選中

$("#"+id).combobox('setValues', selecteditem);

最後貼一下我自己的代碼,如有需要優化的可以評論或私聊我:

var idsCombo = ['ptlx'];

$(function(){
	comboboxGo();
});

function comboboxGo(){
	for(var ind in idsCombo){
		initCombobox(idsCombo[ind]);
	}
}

function clearComboboxGo(){
	for(var ind in idsCombo){
		clearFirstOption(idsCombo[ind]);
	}
}

function clearFirstOption(id){
	$('#'+id).combobox("clear");
	var valueJson = $('#'+id).combobox('getData');
	valueJson[0].selected=false;
	valueJson[0].disabled=true;
	for(var i in valueJson){
		valueJson[i].selected=false;
	}
	$('#'+id).combobox('loadData', valueJson);// 獲取選中的值的values
}

function initCombobox(id){
	// 加載下拉框複選框
	$('#'+id).combobox({
		panelHeight:'100',// 設置爲固定高度,combobox出現豎直滾動條
		multiple:true,
		// formatter方法就是實現了在每個下拉選項前面增加checkbox框的方法
		formatter: function (row) {
			var opts = $(this).combobox('options');
			if(row[opts.valueField]==''){//disabled style="display:none" selected value
				return
			}
			return '<input type="checkbox" class="combobox-checkbox">' + row[opts.textField]
		},
		onLoadSuccess: function () {  // 下拉框數據加載成功調用
			var opts = $(this).combobox('options');
			var target = this;
			var values = $(target).combobox('getValues');// 獲取選中的值的values
			$.map(values, function (value) {
				var el = opts.finder.getEl(target, value);
				el.find('input.combobox-checkbox')._propAttr('checked', true);
			})
		},
		onSelect: function (row) { // 選中一個選項時調用
			var localdata = $('#'+id).combobox('getData');
			var opts = $(this).combobox('options');
			// 獲取選中的值的values
			$("#"+id).val($(this).combobox('getValues'));
			for (var local in localdata){// 對當前的選項數據操作
				if(localdata[local].value==''){
					localdata[0].selected=false;
					localdata[0].disabled=true;
					continue;
				}
				if(localdata[local].value==row.value){
					localdata[local].selected=true;
					break;
				}
			}
			// 設置選中值所對應的複選框爲選中狀態
			var el = opts.finder.getEl(this, row[opts.valueField]);
			el.find('input.combobox-checkbox')._propAttr('checked', true);
			$('#'+id).combobox("clear");// 清空輸入框
			$('#'+id).combobox('loadData', localdata);// 加載數據
		},
		onUnselect: function (row) {// row 就是哪一行的對象
			// 不選中一個選項時調用
			var opts = $(this).combobox('options');
			// 獲取選中的值的values
			$("#"+id).val($(this).combobox('getValues'));
			var localdata = $('#'+id).combobox('getData');
			for (var local in localdata){ // 對當前的選項數據操作
				if(localdata[local].value==''){
					continue;
				}
				if(localdata[local].value==row.value){// 如果值相同,就置false
					localdata[local].selected=false;
					break;
				}
			}
			var el = opts.finder.getEl(this, row[opts.valueField]);
			el.find('input.combobox-checkbox')._propAttr('checked', false);
		}
	});
}

有想交流的朋友,可以和我私聊或者評論。

發佈了42 篇原創文章 · 獲贊 58 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章