Dojo对话框、iPad和虚拟键盘问题
最近,我一直在做一个项目,这个界面应该适用于台式机和平板电脑,尤其是iPad 我遇到的一个问题是,当输入文本时,iPad上会出现Dojo对话框 基本上是这样的: 在iPad上加载带按钮的Dojo界面-OK 按按钮触摸以显示90%高度和宽度的对话框-确定 单击文本框触摸,如DateTextBox或TimeTextBox-确定,虚拟键盘打开 在UI touch-OK中单击我想要的日期或时间,但我看不到所有选项,因为它比屏幕尺寸长。。。 尝试向下滚动,用两个手指向上滑动,或单击键盘上的“下一步”-不确定,对话框会重新定位,使其顶部位于视口区域的顶部。 基本上,问题是对话框一直试图重新定位自己 如果捕捉到窗口大小调整事件,是否能够停止对话框大小调整和定位 还有人对iPad和Dojo对话框有这个问题吗 另外,我发现这个StackOverflow主题是关于检测虚拟键盘的,但在这种情况下没有多大帮助Dojo对话框、iPad和虚拟键盘问题,ipad,keyboard,dialog,dojo,Ipad,Keyboard,Dialog,Dojo,最近,我一直在做一个项目,这个界面应该适用于台式机和平板电脑,尤其是iPad 我遇到的一个问题是,当输入文本时,iPad上会出现Dojo对话框 基本上是这样的: 在iPad上加载带按钮的Dojo界面-OK 按按钮触摸以显示90%高度和宽度的对话框-确定 单击文本框触摸,如DateTextBox或TimeTextBox-确定,虚拟键盘打开 在UI touch-OK中单击我想要的日期或时间,但我看不到所有选项,因为它比屏幕尺寸长。。。 尝试向下滚动,用两个手指向上滑动,或单击键盘上的“下一步”-不确
谢谢 我昨天刚遇到同样的问题,发现了一个黑客, 这不是一个优雅的解决方案。 如果要停止dijit.对话框重新定位,可以: 1设置dijit.Dialog对象的属性。\u相对位置 在本例中,在调用方法pop.show之后,它是pop:
pop.show();
pop._relativePosition = new Object(); //create empty object
下一步可能是:
检查浏览器类型&OS:dojo或更好
检查虚拟键盘何时激活并禁用重新定位
使用自定义类扩展dijit.Dialog处理所有异常
我昨天刚遇到同样的问题,发现了一个黑客, 这不是一个优雅的解决方案。 如果要停止dijit.对话框重新定位,可以: 1设置dijit.Dialog对象的属性。\u相对位置 在本例中,在调用方法pop.show之后,它是pop:
pop.show();
pop._relativePosition = new Object(); //create empty object
下一步可能是:
检查浏览器类型&OS:dojo或更好
检查虚拟键盘何时激活并禁用重新定位
使用自定义类扩展dijit.Dialog处理所有异常
正如建议的那样,另一种方法是通过扩展对象或相对位置或其他方法来覆盖_position函数。这是我的解决方案,它只允许对话框位于屏幕中间一次。可能有更好的方法来改变这一点,通过玩隐藏和显示事件,但这符合我的需要
dojo.provide("inno.BigDialog");
dojo.require("dijit.Dialog");
dojo.declare("inno.BigDialog",dijit.Dialog,{
draggable:false,
firstPositioned : false,
_position : function() {
if (!dojo.hasClass(dojo.body(), "dojoMove") && !this.firstPositioned) {
this.firstPositioned = true;
var _8 = this.domNode, _9 = dijit.getViewport(), p = this._relativePosition, bb = p ? null
: dojo._getBorderBox(_8), l = Math
.floor(_9.l
+ (p ? p.x : (_9.w - bb.w) / 2)), t = Math
.floor(_9.t
+ (p ? p.y : (_9.h - bb.h) / 2));
if (t < 0) // Fix going off screen
t = 0;
dojo.style(_8, {
left : l + "px",
top : t + "px"
});
}
}
});
正如建议的那样,另一种方法是通过扩展对象或相对位置或其他方法来覆盖_position函数。这是我的解决方案,它只允许对话框位于屏幕中间一次。可能有更好的方法来改变这一点,通过玩隐藏和显示事件,但这符合我的需要
dojo.provide("inno.BigDialog");
dojo.require("dijit.Dialog");
dojo.declare("inno.BigDialog",dijit.Dialog,{
draggable:false,
firstPositioned : false,
_position : function() {
if (!dojo.hasClass(dojo.body(), "dojoMove") && !this.firstPositioned) {
this.firstPositioned = true;
var _8 = this.domNode, _9 = dijit.getViewport(), p = this._relativePosition, bb = p ? null
: dojo._getBorderBox(_8), l = Math
.floor(_9.l
+ (p ? p.x : (_9.w - bb.w) / 2)), t = Math
.floor(_9.t
+ (p ? p.y : (_9.h - bb.h) / 2));
if (t < 0) // Fix going off screen
t = 0;
dojo.style(_8, {
left : l + "px",
top : t + "px"
});
}
}
});
您可以重写_position函数并只调用超类的_position函数一次。看
您可以重写_position函数并只调用超类的_position函数一次。看