描述:主界面打开一个windows,windwos里面包含一个datagrid,欲用键盘上下键控制上下选择行:
1、
datagrid是在一个easyui-window中的,打开windows(包含datagrid):  
$('#win').window('open');
为了用上下键可以向上向下选中行,绑定扩展方法
$('#detail').datagrid('keyCtr');//
//扩展的方法
$.extend($.fn.datagrid.methods, {
    keyCtr: function (jq) {
        return jq.each(function () {
            var grid = $(this);
            grid.datagrid('getPanel').panel('panel').attr('tabindex', 1).bind('keydown', function (e) {
                switch (e.keyCode) {
                    case 38: // up
                        var selected = grid.datagrid('getSelected');                        
                        var rows = grid.datagrid('getRows');
                        if (selected) {
                            var index = grid.datagrid('getRowIndex', selected);
                            if (index > 0) {
                                grid.datagrid('selectRow', index - 1);//???
                            }
                        } else {
                            grid.datagrid('selectRow', rows.length - 1);
                        }
                        break;
                    case 40: // down
                        var selected = grid.datagrid('getSelected');
                        if (selected) {
                            var index = grid.datagrid('getRowIndex', selected);
                            if (index < grid.datagrid('getRows').length - 1) {
                                grid.datagrid('selectRow', index + 1);//???
                            }
                        } else {
                            grid.datagrid('selectRow', 0);
                        }
                        break;                }
            });
        });
    }
});
问题:
   主界面第一次打开windows,用上下键可以正常的跳到上一行、下一行;
   关闭windows  [$('#win').window('open');] 后再打开,再点↓键,则是跳了两行,就像是index+2 了;
   再关闭,重新打开,就是index+3了;......为什么呢?
窗体的关闭的确不是销毁,里面的东西还在,但是我每次都是重新取的选中行啊 var selected = grid.datagrid('getSelected'); 

解决方案 »

  1.   

    多加一个公共变量就好了。var isbind=false;
    //扩展的方法
    $.extend($.fn.datagrid.methods, {
        keyCtr: function (jq) {
            return jq.each(function () {
                var grid = $(this);
                if(!isbind){
                grid.datagrid('getPanel').panel('panel').attr('tabindex', 1).bind('keydown', function (e) {
                    switch (e.keyCode) {
                        case 38: // up
                            var selected = grid.datagrid('getSelected');                        
                            var rows = grid.datagrid('getRows');
                            if (selected) {
                                var index = grid.datagrid('getRowIndex', selected);
                                if (index > 0) {
                                    <span style="color: #FF0000;">grid.datagrid('selectRow', index - 1);//???</span>
                                }
                            } else {
                                grid.datagrid('selectRow', rows.length - 1);
                            }
                            break;
                        case 40: // down
                            var selected = grid.datagrid('getSelected');
                            if (selected) {
                                var index = grid.datagrid('getRowIndex', selected);
                                if (index < grid.datagrid('getRows').length - 1) {
                                    <span style="color: #FF0000;">grid.datagrid('selectRow', index + 1);//???</span>
                                }
                            } else {
                                grid.datagrid('selectRow', 0);
                            }
                            break;
     
                    }
                });
              isbind=true;
              }
            });
        }
    });