使用 JQWidgets 实现下拉框多选+文本搜索+分段搜索

JQWidgets 默认的控件已经足够强大,但总会遇到特殊的需求或变态的想法,这不就出现了如题所说的问题。微笑

一、代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<!-- 
导入 jqwidgets 需要的相关脚本
-->
<script>
var checkDatas = []; //DROPDWON的值集合

//init值为 true 表示第一次使用,也只能用一次
function paintCheckboxes(data, init) {
	var source = {
        datatype: "json", localdata: data, datafields: [{ name: 'value' }, { name: 'text' }]   
    };
    var dataAdapter = new $.jqx.dataAdapter(source);
    if(init) {
    	$("#jqxCheckBoxs").jqxListBox({width: '100%', source: dataAdapter, checkboxes: true, height: '100%', displayMember: "text", valueMember: "value"});
    } else {
    	$("#jqxCheckBoxs").jqxListBox({source: dataAdapter});
    }
    var items = $("#jqxCheckBoxs").jqxListBox('getItems');
    if(checkDatas.length > 0) {
    	$.each(items, function (index) {
    		var item = items[index];
    		if(item.value != 'allinone') {
    			var targetMethond = 'uncheckIndex';
    			for(var i = 0; i < checkDatas.length; i++) {
        			var checkData = checkDatas[i];
        			if(checkData.value == item.value) {
        				targetMethond = 'checkIndex';
        				break;
        			}
        		}
    			$("#jqxCheckBoxs").jqxListBox(targetMethond, index);
    		}
        });
    }
}

$(function(){
	$("#jqxDropDownButton").jqxDropDownButton({autoOpen: false, width: '200', height: '25', theme: theme});
	$("#jqxInput").jqxInput({placeHolder: "搜索框", height: 25, width: 200, minLength: 1});
	
	var jsonDatas = [{value:'allinone', text:'全选/反选'},
	    {value:'avc', text:'avc'},{value:'bcd', text:'bcd'},{value:'adc', text:'adc'},
	    {value:'bed', text:'bed'},{value:'vcx', text:'vcx'},{value:'xcb', text:'xcb'}];
	paintCheckboxes(jsonDatas, true);
	
	$('#jqxDropDownButton').on('close', function () { 
		var result = '';
		for(var i = 0; i < checkDatas.length; i++) {
			if(i > 0) result += ',';
			result += checkDatas[i].value;
		}
		$('#jqxDropDownButton').jqxDropDownButton('setContent', result);
	});
	
    $("#jqxCheckBoxs").on('checkChange', function (event) {
        var args = event.args;
        var value = args.value;
        var checked = args.checked;
        if(value == 'allinone') {
        	var items = $("#jqxCheckBoxs").jqxListBox('getItems');
        	var targetMethond = checked?'checkIndex':'uncheckIndex';
    		$.each(items, function (index) {
    			var item = items[index];
    			if(item.value != 'allinone') {
    				$("#jqxCheckBoxs").jqxListBox(targetMethond, index);
    			}
            });
        } else {
        	var tmpDatas = [];
        	for(var i = 0; i < checkDatas.length; i++) {
        		var checkData = checkDatas[i];
        		var isIn = checkData.value == value;
    			if(isIn) {
    				continue;//检查是否已存在。
    			}
        		tmpDatas.push(checkData);
        	}
        	if(checked) {
        		tmpDatas.push({value:value, text:value});
        	} 
        	checkDatas = tmpDatas;
        }
    });
    
    $("#jqxInput").keyup(function(){
    	var _val = $(this).val();
    	var searchDatas = [];
    	if(!_val) {
    		searchDatas = jsonDatas;
    	} else {
    		var li = _val.lastIndexOf(',');
    		if(li > -1) {
    			_val = _val.substr(li + 1);
    		}
    		var regObj = new RegExp('.*?' + _val + '.*?', 'i');
        	searchDatas.push(jsonDatas[0]);
    		for(var j = 1; j < jsonDatas.length; j++) {
    			var jsonData = jsonDatas[j];
    			var _write = regObj.test(jsonData.value);
    			if(_write) {
    				searchDatas.push(jsonData);
    			}
    		}
    	}
		paintCheckboxes(searchDatas);
    });
});
</script>
<style>
.fll {float: left;}
</style>
</head>
<body>
<div id='jqxDropDownButton' style="line-height: 25px;">
	<div style="width: 200px;height: 300px;">
		<input type="text" id="jqxInput" class="fll"/>
		<div id="jqxCheckBoxs" class="fll"></div>
	</div>
</div>
</body>
</html>

二、效果如下:

2.1 输入 x 搜索相关记录,并打勾 vcx;

2.2 输入 , 分段搜索,输入 a 搜索相关记录,并打勾 avc;

2.3 鼠标单击页面,值显示[ vcx,avc ];

三、结语

标题所述的功能,在JQWidgets 的控件里都有,可惜都是散的,要么有复选框时不能搜索,要么能搜索时没有复选,最后没有分段搜索,

所以进行了一下特殊的组合方式。


 


 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值