Window 弹出窗口不断改变它在 ext js 中从顶部开始的位置
Window pop up keeps changing it's position from top in ext js
我的页面上几乎没有文本框、日期选择器、手风琴和下拉菜单。在页面加载时,当我从下拉列表中单击选项卡时,弹出窗口不会出现在特定位置。当我明确地单击文本框时,弹出窗口才会出现在一个完美的位置。但是这种行为是不断变化的。有时它会显示在正确的位置,有时则不会。名称文本框将根据条件(基于所选选项)可见。其他一些字段也显示弹出窗口,但显示正确。
弹出代码
Ext.define('tooltip', {
extend: 'Ext.window.Window',
displayText: '',
header: '',
xtype: 'myWin',
width: 200,
height: 100,
layout: 'fit',
customId:'',
align:'center',
cls: 'arrow-box',
focusOnToFront: false,
items: [{
xtype : 'label',
text: '',
itemId:'lbldescription',
height:20,
width:183,
style: 'padding-bottom: 8px; margin-top:-28px;',
},{
xtype: 'component',
itemId:'hrefLink',
autoEl: {
tag: 'a',
html: 'Learn about popup',
href:'https://whosebug.com/questions/ask'
},
height:20,
width:201,
// style:{
// textAlign:'left',
// display:'block',
// margin-top:36
// },
}],
buttons: [{
text: 'Close',
width:'100%',
style:{
textAlign:'left',
display:'block'
},
handler: function(){
this.destroy();
}
},{
text: 'Do not show again',
//width:'100%',
style:{
textAlign:'right',
display:'block'
},
handler: function(btn){
localStorage.setItem(btn.up('myWin').customId, 1);
this.destroy();
}
}],
initComponent: function () {
this.callParent();
this.id = this.customId;
this.setTitle(this.header);
//Update text
Ext.ComponentQuery.query('#lbldescription')[0].setText(this.displayText);
},
})
主要js
fieldLabel: Name
labelClsExtra: 'x-form-item-label x-required',
name: 'Name',
itemId: 'Name',
xtype: 'textfield',
fieldCls: 'big',
width: 650,
enforceMaxLength: true,
maxLength: 1000,
isDisplayTooltip:false,
listeners: {
focus: function(field, ev) {
var customId='nameTooltip';
if ( field.isDisplayTooltip && parseInt(localStorage.getItem(customId)) != 1) {
field.suspendEvent('blur');
field.suspendEvent('focus');
var displayMessage = 'This is popup';
field.popup = Ext.create('tooltip',{
displayText: displayMessage,
customId:customId,
header: Name
});
field.popup.showBy(field.el, 'l-r',[10-0]);
field.focus();
field.resumeEvent('focus');
field.resumeEvent('blur');
}
},
blur: function(field,ev) {
if(ev.relatedTarget === null){
field.popup.destroy();
return;
}
if(ev.relatedTarget.id.indexOf('nameTooltip')<0 && ev.relatedTarget.parentNode.id.indexOf('nameTooltip') <0){
if( field.popup != undefined && field.popup != null)field.popup.destroy();
}
},
我已经通过使用 showAt(x,y) 而不是 showBy(field.el,'l-r',[10-0])
解决了这个问题
var elm =field.getEl();
var x= elm.getX() + field.width+10;
var height=field.getHeight();
var getTopEnfOfInput=height+(height/2);
var y= elm.getY()-getTopEnfOfInput;
field.popup.showAt(x,y);
我的页面上几乎没有文本框、日期选择器、手风琴和下拉菜单。在页面加载时,当我从下拉列表中单击选项卡时,弹出窗口不会出现在特定位置。当我明确地单击文本框时,弹出窗口才会出现在一个完美的位置。但是这种行为是不断变化的。有时它会显示在正确的位置,有时则不会。名称文本框将根据条件(基于所选选项)可见。其他一些字段也显示弹出窗口,但显示正确。
Ext.define('tooltip', {
extend: 'Ext.window.Window',
displayText: '',
header: '',
xtype: 'myWin',
width: 200,
height: 100,
layout: 'fit',
customId:'',
align:'center',
cls: 'arrow-box',
focusOnToFront: false,
items: [{
xtype : 'label',
text: '',
itemId:'lbldescription',
height:20,
width:183,
style: 'padding-bottom: 8px; margin-top:-28px;',
},{
xtype: 'component',
itemId:'hrefLink',
autoEl: {
tag: 'a',
html: 'Learn about popup',
href:'https://whosebug.com/questions/ask'
},
height:20,
width:201,
// style:{
// textAlign:'left',
// display:'block',
// margin-top:36
// },
}],
buttons: [{
text: 'Close',
width:'100%',
style:{
textAlign:'left',
display:'block'
},
handler: function(){
this.destroy();
}
},{
text: 'Do not show again',
//width:'100%',
style:{
textAlign:'right',
display:'block'
},
handler: function(btn){
localStorage.setItem(btn.up('myWin').customId, 1);
this.destroy();
}
}],
initComponent: function () {
this.callParent();
this.id = this.customId;
this.setTitle(this.header);
//Update text
Ext.ComponentQuery.query('#lbldescription')[0].setText(this.displayText);
},
})
主要js
fieldLabel: Name
labelClsExtra: 'x-form-item-label x-required',
name: 'Name',
itemId: 'Name',
xtype: 'textfield',
fieldCls: 'big',
width: 650,
enforceMaxLength: true,
maxLength: 1000,
isDisplayTooltip:false,
listeners: {
focus: function(field, ev) {
var customId='nameTooltip';
if ( field.isDisplayTooltip && parseInt(localStorage.getItem(customId)) != 1) {
field.suspendEvent('blur');
field.suspendEvent('focus');
var displayMessage = 'This is popup';
field.popup = Ext.create('tooltip',{
displayText: displayMessage,
customId:customId,
header: Name
});
field.popup.showBy(field.el, 'l-r',[10-0]);
field.focus();
field.resumeEvent('focus');
field.resumeEvent('blur');
}
},
blur: function(field,ev) {
if(ev.relatedTarget === null){
field.popup.destroy();
return;
}
if(ev.relatedTarget.id.indexOf('nameTooltip')<0 && ev.relatedTarget.parentNode.id.indexOf('nameTooltip') <0){
if( field.popup != undefined && field.popup != null)field.popup.destroy();
}
},
我已经通过使用 showAt(x,y) 而不是 showBy(field.el,'l-r',[10-0])
解决了这个问题 var elm =field.getEl();
var x= elm.getX() + field.width+10;
var height=field.getHeight();
var getTopEnfOfInput=height+(height/2);
var y= elm.getY()-getTopEnfOfInput;
field.popup.showAt(x,y);