Ext js check列 - 将重点更改为checkchange

时间:2014-04-25 19:25:37

标签: javascript extjs extjs4.2

我想要发生的事情: 单击行中的复选框后,将焦点设置在同一行中的另一列。

实际发生了什么: 焦点设置在另一列上,但焦点几乎立即丢失。 焦点返回到行,而不是复选框(或保留文本区域)。

我尝试了一些使用插件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?,但这只会改变改变焦点的方法;焦点仍然跳回到那一行。

1 个答案:

答案 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);
    }
  }
}