我想要发生的事情: 单击行中的复选框后,将焦点设置在同一行中的另一列。
实际发生了什么: 焦点设置在另一列上,但焦点几乎立即丢失。 焦点返回到行,而不是复选框(或保留文本区域)。
我尝试了一些使用插件RowEditing和CellEditing更改焦点的不同选项,但重点不会持久。
我认为添加延迟可能会完成这项工作,但我无法正确配置侦听器以使用延迟。 我还以为在checkchange监听器中添加一个preventDefault调用也可以完成这项工作,但是我还没弄清楚checkchange里面的事件是什么来调用preventDefault。
侦听器(作为CheckColumn配置的一部分添加)定义为:
listeners: {
checkchange: function(cc, index, ischecked, eOpts){
console.log(arguments);
if (ischecked){
// focus on price input box
item_grid.plugins[0].startEdit(index, 6);
// prevent default here would be helpful, as it would hopefully
// keep the focus from jumping back to this column from the text column
// I am having trouble capturing what the event is in this listener
}
}
}
我看过How to focus on editable textfield when checkbox is checked in ExtJS Grid?,但这只会改变改变焦点的方法;焦点仍然跳回到那一行。
答案 0 :(得分:0)
我决定的解决方案/解决方法是延迟焦点事件的更改,直到checkchange监听器完成它的执行为止。
我不是百分之百,但它现在有效。
listeners: {
checkchange: function(cc, index, ischecked, eOpts){
if (ischecked){
Ext.create('Ext.util.DelayedTask', function(){
// focus on price input box
item_grid.plugins[0].startEdit(index, 6);
}).delay(150);
}
}
}