首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ZK组合框禁用关闭

ZK组合框禁用关闭
EN

Stack Overflow用户
提问于 2022-11-04 14:04:54
回答 1查看 29关注 0票数 0

我正在为呈现而奋斗。我有一个带有2逻辑列表的组合框(1是2的简短版本,带有“short”选项,2是一个包含所有条目的列表,没有“short”选项)。我已经完成了“显示更多”选项的onClick事件跟踪的列表交换逻辑。当我点击这个选项时,combobox 关闭,而不是我需要重新打开它才能看到完整的列表。所以,我的问题是,当我单击这个特定的选项时,是否有人知道如何保持combobox打开(而且,通过另一个列表动态填充模型)?也许还有其他更有效地完成任务的最佳实践吗?谢谢大家的帮助

我对组合框有一个想法,它允许多个选择--当单击某个选项时,它不会关闭,但我没有找到任何相关信息。也许你可以提出你的建议

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 06:43:53

默认情况下,不支持“单击‘显示更多’并保持弹出窗口打开‘”的行为。所以您必须重写它的js小部件的doClick_(),请阅读https://www.zkoss.org/wiki/ZK_Client-side_Reference/General_Control/Widget_Customization

下面是一个例子。

代码语言:javascript
运行
复制
<zscript><![CDATA[
ListModelList fullModel = new ListModelList(Locale.getAvailableLocales());
ListModelList model1 = new ListModelList(fullModel.subList(0, 2));
model1.add("show more");

    ]]></zscript>
<combobox id="box" model="${model1}" readonly="true" onSelect="loadAll()"/>
<script src="comboitem-doclick.js"/>
    <zscript><![CDATA[
    public void loadAll(){
        if (model1.getSelection().iterator().next().equals("show more")){
            box.setModel(fullModel);
            box.setValue("");
        }
    }
    ]]></zscript>
代码语言:javascript
运行
复制
/**
 * Purpose: when a use selects a specific item, keep the popup open.
 * Based on version: 9.6.3
 */
zk.afterLoad('zul.inp', function() {
    var exWidget = {};
    zk.override(zul.inp.Comboitem.prototype, exWidget, {
        doClick_: function doClick_(evt) {
            if (!this._disabled) {
                var cb = this.parent;

                cb._select(this, {
                  sendOnSelect: true,
                  sendOnChange: true
                });

                this._updateHoverImage();
                if (this.getLabel() != 'show more'){
                    cb.close({
                      sendOnOpen: true,
                      focus: true
                    }); // Fixed the onFocus event is triggered too late in IE.
                }

                cb._shallClose = true;
                if (zul.inp.InputCtrl.isPreservedFocus(this)) zk(cb.getInputNode()).focus();
                evt.stop();
            }
        },
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74318292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档