Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dojo对话框、iPad和虚拟键盘问题_Ipad_Keyboard_Dialog_Dojo - Fatal编程技术网

Dojo对话框、iPad和虚拟键盘问题

Dojo对话框、iPad和虚拟键盘问题,ipad,keyboard,dialog,dojo,Ipad,Keyboard,Dialog,Dojo,最近,我一直在做一个项目,这个界面应该适用于台式机和平板电脑,尤其是iPad 我遇到的一个问题是,当输入文本时,iPad上会出现Dojo对话框 基本上是这样的: 在iPad上加载带按钮的Dojo界面-OK 按按钮触摸以显示90%高度和宽度的对话框-确定 单击文本框触摸,如DateTextBox或TimeTextBox-确定,虚拟键盘打开 在UI touch-OK中单击我想要的日期或时间,但我看不到所有选项,因为它比屏幕尺寸长。。。 尝试向下滚动,用两个手指向上滑动,或单击键盘上的“下一步”-不确

最近,我一直在做一个项目,这个界面应该适用于台式机和平板电脑,尤其是iPad

我遇到的一个问题是,当输入文本时,iPad上会出现Dojo对话框

基本上是这样的:

在iPad上加载带按钮的Dojo界面-OK 按按钮触摸以显示90%高度和宽度的对话框-确定 单击文本框触摸,如DateTextBox或TimeTextBox-确定,虚拟键盘打开 在UI touch-OK中单击我想要的日期或时间,但我看不到所有选项,因为它比屏幕尺寸长。。。 尝试向下滚动,用两个手指向上滑动,或单击键盘上的“下一步”-不确定,对话框会重新定位,使其顶部位于视口区域的顶部。 基本上,问题是对话框一直试图重新定位自己

如果捕捉到窗口大小调整事件,是否能够停止对话框大小调整和定位

还有人对iPad和Dojo对话框有这个问题吗

另外,我发现这个StackOverflow主题是关于检测虚拟键盘的,但在这种情况下没有多大帮助


谢谢

我昨天刚遇到同样的问题,发现了一个黑客, 这不是一个优雅的解决方案。 如果要停止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函数一次。看