Title: 在 combo 的 doQuery 里, 能否不触发 onChange 事件? Post by: iamjxc on April 23, 2014, 02:08:43 AM 我想在combo 控件的 onChange 里写如下代码:
function onComboChange(value, oldValue){ // 触发原控件的 change 事件 var el = $(this); el.trigger("change", value); } 但是发现 doQuery 拼音检索, 执行 filter 时, 会不断触发 onChange 事件 我看 setValues 有第3个参数 remainText, 能否在 remainText==true 时不触发 onChange 事件? 需要修改 combo 的 setValues 方法, 增加 remainText 参数, 然后把 combobox 的 remainText 参数传递过去 在 combo 的 setValues 方法里判断 remainText , 就不调用 onChange 建议把 remainText 参数公开, 有的情况下用起来挺方便的. Title: Re: 在 combo 的 doQuery 里, 能否不触发 onChange 事件? Post by: iamjxc on April 23, 2014, 10:35:03 PM 看来 stworthy 还没空解决这个问题, 我的变通方案是在 onChange 里过滤多余的调用.
function onComboChange(value, oldValue){ var el = $(this); var text = el.combo("getText"); if (checkTextInCombo(el, text)) { el.trigger("change", value); }else{ // 处理拼音检索后, 用鼠标点选的情况 if (text == oldValue && text != value){ el.trigger("change", value); } } } function checkTextInCombo(el, text){ // 清空数据的情况, 也触发 if (text == "") return true; var datas = null; var opt = el.combo("options"); if (opt.type == "combobox"){ datas = el.combobox("getData"); }else if (opt.type == "combogrid"){ var grid = el.combogrid("grid"); // get datagrid object datas = grid.datagrid("getRows"); }else if (opt.type == "combotree"){ // 没有拼音检索的情况可以直接确认 return true; } // 校验 text 是否在数据里 for(var i=0,len=datas.length;i<len;i++){ var data = datas; if (data[opt.textField] == text){ return true; } } return false; } |