Extjs 如何禁用选项卡键焦点上的文本选择
extjs4.1 我有两个文本字段,如:Extjs 如何禁用选项卡键焦点上的文本选择,extjs,extjs4,extjs4.1,Extjs,Extjs4,Extjs4.1,extjs4.1 我有两个文本字段,如: { fieldLabel: 'Email', name: 'email', vtype: 'email', }, { fieldLabel: 'Phone', name: 'phone',
{
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);
});