关于easyui中combogrid中输入检索关键字时会被回退的问题

tanxing1122 2015-11-04 11:45:43
直接上代码先,

$('#DiagnosSearch').combogrid({
panelWidth:500,
panelHeight:200,
delay: 200,
mode: 'remote',
url:PUBLIC_CONSTANT.URL.QUERY_GRID_URL,
fitColumns: true,
striped: true,
editable:true,
pagination : true,//是否分页
rownumbers:true,//序号
collapsible:false,//是否可折叠的
fit: true,//自动大小
pageSize: 5,//每页显示的记录条数,默认为10
pageList: [5],//可以设置每页记录条数的列表
method:'post',
idField: 'HIDDEN',
textField: 'desc',
columns: [[
{field:'desc',title:'名称',width:400,sortable:true},
{field:'code',title:'code',width:120,sortable:true},
{field:'HIDDEN',title:'HIDDEN',width:120,sortable:true,hidden:true},
]],
keyHandler:{
up: function () {},
down: function () {},
enter: function () { },

query:function(q){

$('#DiagnosSearch').combogrid("grid").datagrid("reload",{'keyword':q});
//alert(q)
$('#DiagnosSearch').combogrid("setValue",q);

/*
window.setTimeout(
function (a) {
return function () {
$('#DiagnosSearch').combogrid("setValue",a);;
};
}(q)
, 100);
*/
LoadDiagnosData();

}
},
onSelect: function (){
var selected = $('#DiagnosSearch').combogrid('grid').datagrid('getSelected');
if (selected) {
$('#DiagnosSearch').combogrid("options").value=selected.HIDDEN;
}
}
});


描述下我的问题:
比如我输入检索关键字qwert,然后我想删除,按退格键,想删除ert这几个字符,效果会变成,我按一次退格键,qwer, 我再按一次退格键,变成qwe但是紧接着又会变成qwer,也就是我必须按不止三次退格键才能删除ert这三个字符。
输入时也会有相同的问题,我想输入qwert,我按q的时候,可能检索框会显示q但是紧接着q就会消失。
我尝试加了个alert(q),这种情况就消失了,所以我想会不会是延迟赋值会有效果,但是用settimeout还是会出现这种情况。所以想请教各位帮我分析一下,谢谢大家
...全文
519 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
java小超人 2018-04-23
  • 打赏
  • 举报
回复
抱歉写错了 不是14747 是14797 赞 EasyUI for jQuery 1.5.4.1 的位置在14797 的位置 if($(_b10).combo("getText")!=s){ //$(_b10).combo("setText",s);//避免查询回退问题 }
java小超人 2018-04-23
  • 打赏
  • 举报
回复
赞 EasyUI for jQuery 1.5.4.1 的位置在14747 的位置 if($(_b10).combo("getText")!=s){ //$(_b10).combo("setText",s);//避免查询回退问题 }
tanxing1122 2015-11-09
  • 打赏
  • 举报
回复
找到原因了,需要修改加载的easyui库,


    function _8bd(_8be, _8bf, _8c0) {
        var _8c1 = $.data(_8be, "combogrid");
        var opts = _8c1.options;
        var grid = _8c1.grid;
        var rows = grid.datagrid("getRows");
        var ss = [];
        var _8c2 = $(_8be).combo("getValues");
        var _8c3 = $(_8be).combo("options");
        var _8c4 = _8c3.onChange;
        _8c3.onChange = function() {};
        grid.datagrid("clearSelections");
        for (var i = 0; i < _8bf.length; i++) {
            var _8c5 = grid.datagrid("getRowIndex", _8bf[i]);
            if (_8c5 >= 0) {
                grid.datagrid("selectRow", _8c5);
                ss.push(rows[_8c5][opts.textField]);
            } else {
                ss.push(_8bf[i]);
            }
        }
        $(_8be).combo("setValues", _8c2);
        _8c3.onChange = _8c4;
        $(_8be).combo("setValues", _8bf);
        if (!_8c0) {
            var s = ss.join(opts.separator);
            if ($(_8be).combo("getText") != s) {
                //$(_8be).combo("setText", s);
            }
        }
    };

看注释
tanxing1122 2015-11-04
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
$('#DiagnosSearch').combogrid("setValue",q); 去掉这句。。你这里都重设过值了,
不能去掉的,如果去掉的话,我输入检索值得时候,只要一有停顿,检索框里的值就会清空
Go 旅城通票 2015-11-04
  • 打赏
  • 举报
回复
$('#DiagnosSearch').combogrid("setValue",q); 去掉这句。。你这里都重设过值了,
Hello World, 2015-11-04
  • 打赏
  • 举报
回复
reload会重新设置值的,后面又setValue,中间还在输入,有点乱 延时是个办法,不然就用autocomplete
tanxing1122 2015-11-04
  • 打赏
  • 举报
回复
引用 3 楼 showbo 的回复:
delay你放大点试试,easyui内部应该加了延时操作重设输入框值的操作 $('#DiagnosSearch').combogrid({ panelWidth:500, panelHeight:200, delay: 500,
版主,这种方式能缓解现象,但是解决不了问题,还是有一定几率出现这种情况。
Go 旅城通票 2015-11-04
  • 打赏
  • 举报
回复
delay你放大点试试,easyui内部应该加了延时操作重设输入框值的操作 $('#DiagnosSearch').combogrid({ panelWidth:500, panelHeight:200, delay: 500,

87,838

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧