0

我正在为文本字段实现自动完成弹出窗口,因此我需要弹出窗口始终出现在文本字段下方。在 ZK 中执行此操作的标准方法是:

    popup.open( field, "after_start" );

这很好,除了我的文本框是网格控件的一部分。当用户在靠近屏幕底部的一行输入数据时,没有足够的空间来显示字段下方的弹出窗口,ZK 会调整弹出窗口的位置以使其完全可见,从而遮挡文本框控件。

我的桌面设计有足够的空间来显示字段下方的弹出窗口;我只需要确保客户端滚动,以便弹出窗口保持在该字段下方。

我试过使用Clients.scrollIntoView( popup );,但这无济于事,因为弹出窗口会自动显示。

我知道的另一种可能性是使用"end_before"位置值将弹出窗口定位在文本框的右侧,但这与自动完成弹出窗口的标准 UI 约定不一致。

4

1 回答 1

1

opts可以使用 Popup 小部件的方法的参数open(从客户端)调整弹出位置。有关更多详细信息,请参阅该方法的参考

不幸的是,无法从 Java 代码中设置此参数值,您应该覆盖客户端(即 javascript)open方法的默认行为以获取结果。

本文描述了小部件方法的覆盖。

在您的情况下,您应该opts.overflow在调用原始open方法之前将属性设置为任何值。例如:

<popup xmlns:w="http://www.zkoss.org/2005/zk/client">
    <attribute w:name="open">
        function (ref, offset, position, opts) {
            var _opts = opts || {}; // opts can be undefined! 
            _opts.overflow = true;
            this.$open(ref, offset, position, _opts);
        }
    </attribute>
</popup>

popup.open如果需要,使用打开此弹出窗口后Clients.scrollIntoView使其可见。

于 2013-03-07T12:54:17.183 回答