我正在为呈现而奋斗。我有一个带有2逻辑列表的组合框(1是2的简短版本,带有“short”选项,2是一个包含所有条目的列表,没有“short”选项)。我已经完成了“显示更多”选项的onClick事件跟踪的列表交换逻辑。当我点击这个选项时,combobox 关闭,而不是我需要重新打开它才能看到完整的列表。所以,我的问题是,当我单击这个特定的选项时,是否有人知道如何保持combobox打开(而且,通过另一个列表动态填充模型)?也许还有其他更有效地完成任务的最佳实践吗?谢谢大家的帮助
我对组合框有一个想法,它允许多个选择--当单击某个选项时,它不会关闭,但我没有找到任何相关信息。也许你可以提出你的建议
发布于 2022-11-07 06:43:53
默认情况下,不支持“单击‘显示更多’并保持弹出窗口打开‘”的行为。所以您必须重写它的js小部件的doClick_(),请阅读https://www.zkoss.org/wiki/ZK_Client-side_Reference/General_Control/Widget_Customization
下面是一个例子。
<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>/**
* 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();
}
},
});
});https://stackoverflow.com/questions/74318292
复制相似问题