使ExtJS输入字段失去焦点
我有一个使ExtJS输入字段失去焦点,extjs,extjs4,Extjs,Extjs4,我有一个numberfield输入,当用户按enter键时,我想失去焦点 以下是当前配置: { xtype: 'numberfield', minValue: 0, maxValue: 99999, hideTrigger: true, keyNavEnabled: false, mouseWheelEnabled: false, enableKeyEvents: true, listeners: { specialkey: function(f, e)
numberfield
输入,当用户按enter键时,我想失去焦点
以下是当前配置:
{
xtype: 'numberfield',
minValue: 0,
maxValue: 99999,
hideTrigger: true,
keyNavEnabled: false,
mouseWheelEnabled: false,
enableKeyEvents: true,
listeners: {
specialkey: function(f, e) {
if (e.getKey() == e.ENTER)
f.blur();
}
}
}
specialkey
处理程序按预期调用blur()
,但唯一的结果是插入符号从输入中消失(表示DOM文本输入元素已模糊)。该字段仍然具有所有x-form-focus
etc css类,并且检查该对象表明privatehasFocus
属性仍然为true
有什么建议吗
我曾尝试在blur()
调用之后显式调用f.onBlur()
,但没有任何区别
(顺便说一句,该字段不属于表单,因此没有要提交的表单。)修复。该问题是由Ext.form.field.Trigger类中的一个奇怪行为引起的,在调用常规的
'blur()'
函数时,它们不会触发'triggerBlur()'
。非常有趣:
listeners: {
specialkey: function(f, e) {
if (e.getKey() == e.ENTER)
{
f.triggerBlur();
f.blur();
}
}
}
这对我很有用:
specialkey: function(field,events) {
if (events.getKey() == events.ENTER) {
var nextfld = field.nextSibling();
nextfld.focus(true,100);
}
}
specialkey-是textfield、textare、datefield等组件的侦听器
events.getKey-获取用户键盘输入
events.ENTER-我用它来表示当键盘上输入时会触发的事件
field.nextSibling-field指的是当前组件,以及组件的nextSibling属性,用于告诉谁将是下一个组件
最后是nextfld.focus以聚焦下一个组件聚焦另一个组件如何?甚至它的父容器…@VoidMain-cheers,但如果调用
f.up().focus(),结果与调用blur()相同
它不会使f
失去其聚焦类?快速问题:您是单独调用f.up().focus()
还是以前调用过f.blur()
?本地测试表明,如果我调用f.blur()
调用f.up().focus()
它会以某种方式被忽略…@VoidMain focus(),但尝试这两种方法会得到相同的结果谢谢!它当然可以工作,但考虑到triggerBlur是私有的,它看起来像一个extjs bug。我将把它传递给ExtJS支持。顺便说一下,这将通过在代码中添加triggerBlur()来解决您的问题。是的。这肯定是一个bug,但这是修复方法。确保你询问了所有你发现的bug。这里有一些非常聪明的人,他们可以为你们修复它们,有时比我的经验中他们的支持更快或更好。事实上,第一个要问的地方也是如此。事实上,我忘了我们有一个extjs的支持订阅:)