jQuery EasyUI |
您所在的位置:网站首页 › 设置下拉框内容 › jQuery EasyUI |
一、combobox 前台页面动态加载显示
判断输入值在下拉列表是否存在 var nameStr =''; $(document).ready(function(){ $('#customerId').combobox({ prompt:'请输入或选择客户名称', //prompt属性为没有选中任何选项的时候显示的标签 如“--性别--” url:'${rc.contextPath}/sale/findBusinessPartnerByName', valueField:'id', textField:'text' , onClick: function(node) { attributeShow($("#customerId").combotree("getValue")); }, filter: function(q, row){ //filter属性模糊查询 var opts = $(this).combobox('options'); //return row[opts.textField].indexOf(q) == 0; return row[opts.textField].indexOf(q)>-1;//将从头位置匹配改为任意匹配 }, onLoadSuccess: function(){ var partnerId = '${(saleOrder.partnerId)!}'; if(partnerId){ $('#customerId').combobox('setValue',partnerId); } }, onSelect: function(){ var partnerId = $("#customerId").combotree("getValue"); $("#business_partner_id").val(partnerId); findBusinessPartnerContactByPartnerId(partnerId); findSaleAddressByPartnerId(partnerId); }, onChange: function(newValue, oldValue){ var v = $("#customerId").combotree("getText"); var arr = nameStr.split(','); var index = $.inArray(v, arr); if(index < 0 ){ $("#business_partner_id").val(''); }else{ $("#business_partner_id").val($("#customerId").combobox("getValue")); } }, formatter: function(row){ var opts = $(this).combobox('options'); nameStr += row[opts.textField] + "," ; return row[opts.textField]; } }); });
Combobox用法和方法参数: 1、 需要引入class=" easyui-combobox” 2、 参数设置需要在data-options中设置 3、 属性参数配置: valueField:基础数据值名称绑定到Combobox(提交值) textField:基础数据的字段名称绑定的Combobox(显示值) mode:定义当文本改变时如何加载列表数据,当设置为remote模式下,什么类型的用户将被发送http请求参数名为'q'的服务器,以获取新的数据。 url:从远程URL来加载列表数据 method:http方法检索列表数据 data:列表中被加载的数据 filter:定义如何过滤本地数据“模式”设置为'local' formatter:定义如何呈现行 loader:定义如何从远程服务器加载数据 4、 事件: onBeforeLoad(param): 操作之前将数据加载,返回false就取消这个荷载作用 onLoadSuccess():触发时,远程数据加载成功 onLoadError:触发时,远程数据加载错误 ONSELECT:触发,当用户选择一个列表项 onUnselect:触发,当用户取消选择一个列表 5、方法: options():返回选择对象 getData():返回加载的数据 loadData(data):加载列表数据 reload(url):重新加载远程数据列表 setValues(values):设置combobox的值数组 setValue(value):设置combobox的值 clear():清空combobox的值 select(value):选中指定的值 unselect(value):取消指定的值 二、创建combobox官方API指出,创建combobox有三种方式: 1、通过标签 aitem12、通过标签 3、通过标签和Javascript代码 [javascript] $('#cc').combobox({ url:'combobox_data.json', valueField:'id', textField:'text' }); 三者孰优孰劣就不赘述了。原理很简单:创建一个容器;把数据放入容器。创建容器最简单莫过于HTML标签,插入数据最灵活莫过于Javascript动态处理。 4、例子 生成combobox的数据一般从服务器数据获得,所以,通常的用法应该是这样: [javascript] $.ajax({ url : url, async : false, //同步方式运行 success : function(d) { $("#organTypeNo").combobox({ valueField : 'id', textField : 'text', editable : true, required : true, mode : 'local', data: d.rows }); } });AJAX请求的JSON数据格式如下: [javascript] { "total":1, "rows":[{"id":"U010101","text":"鞋类"}] }三、combobox本地模糊查询 需求:查询下拉框指定数据
例如:输入汉字“北” 出现很多包含汉字“北”的结果,实际上,EasyUI自带的查询功能只能查出以“北”开头的内容,而无法查出“北”在其他位置的数据,这由EasyUI的filter所限制: [javascript] view plain copy print? var opts = $(this).combobox('options'); return row[opts.textField].indexOf(q) == 0; 要实现自定义效果,需覆盖EasyUI的filter
[javascript] //combobox可编辑 $.fn.combobox.defaults.editable = true; //combobox自定义模糊查询 $.fn.combobox.defaults.filter = function(q, row){ var opts = $(this).combobox('options'); return row[opts.textField].indexOf(q) >= 0; }; 说明:filter属性仅用于过滤本地已经加载的数据,而不能过滤远程数据。filter实现的原理很简单:遍历所有数据并与输入字符匹配,匹配结果为true则显示,反之隐藏。EasyUI还有另一个BUG,当输入框输入的字符串和下拉框中某一个完全匹配时,EasyUI会自动选中这一项,再手动点击不会触发onSelect事件,与其联动的其他控件不会得到刷新,比如下面的代码 [javascript] view plain copy print? $.ajax({ dataType: 'json', url : BasePath + "/org_organ_brand/list.json?sort=order_no&order=asc&rows=50000", success : function(d) { $('#brandNo').combobox({ valueField : 'brandNo', textField : 'brandCname', editable:true , required: true, data : d.rows, onSelect:function(){//通过onSelect事件来联动下一级下拉框 var brandNo = $('#brandNo').combobox('getValue'); var userId = $("#userId").val(); $.ajax({ dataType: 'json', url : BasePath + "/org_organ_brand_detail/list.json?sort=order_no&order=desc&rows=50000&brandNo="+brandNo + "&userId=" + userId, success : function(d1) { $('#brandDetailNo').combotree({ editable:true, multiple:true , required: true, data : d1.rows }); } }); } }); } });
四、combobox数据库模糊查询 1、remote模式 如果我想在输入框输入字符然后实时向数据库查询,该怎么办呢?官方API指出: mode string 定义了当文本改变时如何读取列表数据。设置为'remote'时,下拉列表框将会从服务器加载数据。当设置为“remote”模式时,用户输入将被发送到名为'q'的HTTP请求参数到服务器检索新数据。 local 将mode设为 ‘remote’,为该combobox指定URL和loadFilter属性
[javascript] view plain copy print? $("#organTypeNo").combobox({ valueField : 'id', textField : 'text', editable : true, required : true, mode : 'remote', url : url, loadFilter : function (data) {return data.rows;} }); 设置loadFilter是为了处理返回的数据格式,如果格式正确,loadFilter无需配置。此时在下拉框输入数据就会去请求URL的内容并显示。
说明:输入的字符将以名为‘q’的参数传入后台,而不是添加在请求URL的后面,需要在request中捕获该参数作为数据库查询条件。 2、remote和local模式切换需求:二级联动下拉框,下拉框二随下拉框一的值在local和remote之间切换,怎么实现呢?
当然是在下拉框一变化时判断其值,然后设置下拉框二的mode,代码如下: [javascript] view plain copy print? //店铺特殊处理 if(organLevel == 6){ $("#organTypeNo").combobox({ valueField : 'id', textField : 'text', editable : true, required : true, mode : 'remote', url : BasePath + "/uc_store/list.json?sort=store_no&order=asc&rows=50", loadFilter : function (data) {return data.rows;} }); return; } //正常处理非店铺情况 var url = ''; if(organLevel JSON数据格式化例子: [{“id”:1,“text”:”text1″},{“id”:2,“text”:”text2″},{“id”:3,“text”:”text3″,“selected”:true},{“id”:4,“text”:”text4″},{“id”:5,“text”:”text5″}] 属性: 下拉列表框属性扩展自combo(自定义下拉框),下拉列表框新增的属性如下: 属性名 属性值类型描述 valueField string 基础数据值名称绑定到该下拉列表框。 textField string 基础数据字段名称绑定到该下拉列表框。 groupField string 指定分组的字段名称(译者注:分组的字段由数据源决定)。(该属性自1.3.4版开始可用) groupFormatter function(group) 返回格式化后的分组标题文本,以显示分组项(该属性自1.3.4版开始可用)代码示例:$('#cc').combobox({ groupFormatter: function(group){ return '' + group + ''; } }); mode string 定义了当文本改变时如何读取列表数据。设置为’remote’时,下拉列表框将会从服务器加载数据。当设置为“remote”模式时,用户输入将被发送至名为’q’的HTTP请求参数到服务器检索新数据。 url string 通过URL加载远程列表数据。 method string HTTP方法检索数据(POST / GET)。 data array 数据列表加载。代码示例: filter function 定义当’mode’设置为’local’时如何过滤本地数据,函数有2个参数:q:用户输入的文本。row:列表行数据。返回true的时候允许行显示。代码示例: $('#cc').combobox({ filter: function(q, row){ var opts = $(this).combobox('options'); return row[opts.textField].indexOf(q) == 0; } }); formatter function 定义如何渲染行。该函数接受1个参数:row。代码示例: $('#cc').combobox({ formatter: function(row){ var opts = $(this).combobox('options'); return row[opts.textField]; } }); loader function(param,success,error) 定义了如何从远程服务器加载数据。返回false可以忽略该动作。该函数具备如下参数:param:传递到远程服务器的参数对象。success(data):在检索数据成功的时候调用该回调函数。error():在检索数据失败的时候调用该回调函数。 loadFilter function(data) 返回过滤后的数据并显示。(该属性自1.3.3版开始可用) 事件: 下拉列表框事件继承自combo(自定义下拉框),下拉列表框新增的事件如下: 事件名事件参数描述 onBeforeLoad param 在请求加载数据之前触发,返回false取消该加载动作。代码示例:// 在加载服务器数据之前改变http请求参数的值 $('#cc').combobox({ onBeforeLoad: function(param){ param.id = 2; param.language = 'js'; } }); onLoadSuccess none 在加载远程数据成功的时候触发。 onLoadError none 在加载远程数据失败的时候触发。 onSelect record 在用户选择列表项的时候触发。 onUnselect record 在用户取消选择列表项的时候触发。 方法:
下拉列表框扩展自combo(自定义下拉框),下拉列表框新增或重写的方法如下: 方法名方法参数描述 options none 返回属性对象。 getData none 返回加载数据。 loadData data 读取本地列表数据。 reload url 请求远程列表数据。通过’url’参数重写原始URL值。代码示例:$('#cc').combobox('reload'); // 使用旧的URL重新载入列表数据 $('#cc').combobox('reload','get_data.php'); // 使用新的URL重新载入列表数据 setValues values 设置下拉列表框值数组。代码示例: $('#cc').combobox('setValues', ['001','002']); setValue value 设置下拉列表框的值。代码示例: $('#cc').combobox('setValue', '001'); clear none 清除下拉列表框的值。 select value 选择指定项。 unselect value 取消选择指定项。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |