0

ExtJS 4.1

我有 2 个文本字段,例如:

                {
                    fieldLabel: 'Email',
                    name: 'email',
                    vtype: 'email',
                }, {
                    fieldLabel: 'Phone',
                    name: 'phone',
                    minLength: 8,
                    maxLength: 20,
                    value: '+7',
                }, 

如您所见,phone字段具有预定义的值。

当我完成填充emailfileld 时,我按 TAB 键聚焦下一个字段(在我的情况下 -phone字段)。

phone字段被 TAB 键光标聚焦时, incfield 位于值(+7|)的末尾,但字段中的所有文本都被选中,所以如果我输入一些内容,所有文本都会被新文本替换。

我希望光标位于值字符串的末尾,并且值文本不会被选择

4

4 回答 4

2

这是一个有效的解决方法:

{
    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]);
        }
    }
}

由于设置了值,导致页面重排在字段末尾设置插入符号,应该适用于您并且不会导致更改事件。

于 2012-09-11T17:05:00.880 回答
0

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

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

感谢大家抽出时间!

于 2012-10-08T12:38:17.293 回答
0

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

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

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

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);
});
于 2014-04-14T11:39:31.030 回答
0

你可以这样使用。

            {
                fieldLabel: 'Phone',
                name: 'phone',
                minLength: 8,
                maxLength: 20,
                value: '+7',
                listeners:{
                     focus:function(t,e){
                       t.selectText(t.getValue().length,t.getValue().length);
                     }
                }
            }
于 2012-09-11T13:33:03.443 回答