Extjs 如何禁用选项卡键焦点上的文本选择

Extjs 如何禁用选项卡键焦点上的文本选择,extjs,extjs4,extjs4.1,Extjs,Extjs4,Extjs4.1,extjs4.1 我有两个文本字段,如: { fieldLabel: 'Email', name: 'email', vtype: 'email', }, { fieldLabel: 'Phone', name: 'phone',

extjs4.1

我有两个文本字段,如:

                {
                    fieldLabel: 'Email',
                    name: 'email',
                    vtype: 'email',
                }, {
                    fieldLabel: 'Phone',
                    name: 'phone',
                    minLength: 8,
                    maxLength: 20,
                    value: '+7',
                }, 
如您所见,
phone
字段具有预定义的值

当我填写完
email
fileld后,我按TAB键聚焦下一个字段(在我的例子中是-
phone
field)

phone
字段被制表键光标聚焦时,字段位于值的末尾(
+7 |
),但字段中的所有文本都被选中,因此如果我键入了一些内容,所有文本都将被新文本替换

我希望光标位于值字符串的末尾,并且值文本不会被选择,您可以这样使用

            {
                fieldLabel: 'Phone',
                name: 'phone',
                minLength: 8,
                maxLength: 20,
                value: '+7',
                listeners:{
                     focus:function(t,e){
                       t.selectText(t.getValue().length,t.getValue().length);
                     }
                }
            }

这里有一个可行的解决方法:

{
    fieldLabel: 'Phone',
    name: 'phone',
    minLength: 8,
    maxLength: 20,
    value: '+7',
    listeners: {
        focus: function(field){
            var value = field.getValue();
            Ext.Function.defer(field.setRawValue, 1, field, [value]);
        }
    }
}

由于设置的值,导致在字段末尾设置插入符号的页面回流,应适用于ya,且不会导致更改事件。

看起来像是一些Chrome行为。它会自动选择选项卡上下一个文本输入中的所有文本

尝试了所有发布的解决方案,但在Chrome中没有效果(Opera和Mozilla工作正常)


谢谢大家花时间

解决这个问题的关键是使用setTimeout或类似@Reimius的答案

Chrome和IE选择焦点上的所有文本,即使您调用
event.stopPropagation()

可能的解决方案(使用了一些jQuery):


不,那是不对的。我猜您打算使用
setRawValue
方法,因为
setValue
方法将触发更改和验证事件!更不用说这是本机浏览器的问题,不是ExtJS造成的。不管怎样,我就是这样做的。修复了提到的问题,您就有了my+1。我已经测试过它,4.1不会触发更改事件,只有值发生更改时才会触发更改事件,在这种情况下,您只是将其重置为相同的值。不管怎样,假设setRawValue有效,它可能更安全。您测试过setRawValue方法吗?如果你能向我保证它是有效的,我会改变。它也会这样做,但不会触发任何验证
var selectText;

selectText = function(element, startIndex, endIndex) {
  var range;

  // Modern browsers, IE9+
  if (element.setSelectionRange != null) {
    element.selectionStart = startIndex;
    element.selectionEnd = endIndex;
    return;
  }

  // OldIE
  range = element.createTextRange();
  range.collapse(true);
  range.moveEnd('character', endIndex);
  range.moveStart('character', startIndex);
  range.select();
};

$(document).on('focus', 'input textarea', function(event) {
  setTimeout(function() {
    selectText(input, selectionStartIndex, selectionEndIndex);
  }, 0);
});