[img]http://dl.iteye.com/upload/attachment/0073/2902/637c14b4-ba0d-3e85-bc26-caeeab65484f.png[/img]
当我在产品代码输入完之后,单击键盘的enter键,会执行aftereditor事件,去查询体积等条件,但是他却把下面一行给选中了。
[img]http://dl.iteye.com/upload/attachment/0073/2904/0837f2d3-d920-3d95-8491-6578f13c2344.png[/img]
我希望的是,输入产品代码之后,敲回车键可以选择当前这一行而不是下面一行,同时让合同数出入编辑状态。
[img]http://dl.iteye.com/upload/attachment/0073/3592/3474d537-8d92-37e4-986b-28a9a321d447.gif[/img] 有图有真相
先说明你用ext版本几
如果是3版本
[code="java"]var getSelectRows = function(g) {
var records = [];
var selModel = g.getSelectionModel();
if (selModel.getSelections) {
records = selModel.getSelections();
} else {
var pos = selModel.getSelectedCell();
if (pos == null) return records;
var record = g.getStore().getAt(pos[0]);
if (record) records = [record];
}
return records;
} [/code]
[code="java"]editor: new fm.TextField({
allowBlank: false,
listeners:{
specialkey:function(field, e){
if(e.getKey() == e.ENTER){
var gdom = field.el.findParentNode('div.x-grid-panel');
var grid = Ext.getCmp(gdom.id);
var tagRecord;
if (grid) {
var selRecord = getSelectRows(grid);
if (selRecord && selRecord.length > 0) {
tagRecord = selRecord[0];
}
}
grid.startEditing(grid.getStore().indexOf(tagRecord),2);
}
}
}
})[/code]
grid.startEditing(grid.getStore().indexOf(tagRecord),2); 这里的后一个参数2 是开始编辑第3列
如果是4版本
[code="java"]var getSelectRows = function(g) {
var records = [];
var selModel = g.getSelectionModel();
if (selModel.hasSelection()) {
records = selModel.getSelection();
} else {
var pos = selModel.getSelectedCell();
if (pos == null) return records;
var record = g.getStore().getAt(pos[0]);
if (record) records = [record];
}
return records;
} [/code]
[code="java"]editor: {
allowBlank: false,
listeners:{
specialkey:function(field, e){
if(e.getKey() == e.ENTER){
var grid = field.up("grid");
if (grid) {
var selRecord = getSelectRows(grid);
if (selRecord && selRecord.length > 0) {
tagRecord = selRecord[0];
}
}
cellEditing.startEditByPosition({row:grid.getStore().indexOf(tagRecord), column:2});
}
}
}
}[/code]
你始终没说明你用的ext版本 而且之前的代码都是我亲自测试的
我自己用3.1版本测试的 该取得值都取到了 而且我点回车后 并没有你说的选中了第2行 而且代码关键之处都写出来了
在你的代码上加入
[code="java"]Ext.override(Ext.grid.CheckboxSelectionModel, {
onEditorKey : function(field, e){
var k = e.getKey(),
newCell,
g = this.grid,
last = g.lastEdit,
ed = g.activeEditor,
ae, last, r, c;
var shift = e.shiftKey;
if(k == e.TAB){
e.stopEvent();
ed.completeEdit();
if(shift){
newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
}else{
newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
}
}else if(k == e.ENTER){
if(this.moveEditorOnEnter !== false){
if(shift){
newCell = g.walkCells(last.row - 1, last.col, -1, this.acceptsNav, this);
}else{
//CheckboxSelectionModel调用父类Ext.grid.RowSelectionModel的onEditorKey方法
//原方法这行是newCell = g.walkCells(last.row+1, last.col, 1, this.acceptsNav, this);
newCell = g.walkCells(last.row , last.col, 1, this.acceptsNav, this);
}
}
}
if(newCell){
r = newCell[0];
c = newCell[1];
if(last.row != r){
this.selectRow(r);
}
if(g.isEditor && g.editing){
ae = g.activeEditor;
if(ae && ae.field.triggerBlur){
ae.field.triggerBlur();
}
}
g.startEditing(r, c);
}
}
});
[/code] 即可
加了上面的代码 我自己已经测试成功
我加入Ext.override(Ext.grid.CheckboxSelectionModel 。。。。。这个代码就是对CheckboxSelectionModel的处理
我的例子采用的官方例子 默认就这样的