我正在使用BS4XSP插件和List2的Select2 Picker / Combo。不幸的是,在使用它时,我无法捕获该Listbox的更改/单击/ keyup事件来执行代码。这是我的代码提取:
<xp:div rendererType="bootstrap.Panel" title="Facets" id="facets">
<p>
<xp:listBox id="searchFacets" multiple="true" value="#{sessionScope.searchFacets}">
<xp:selectItems>
<xp:this.value>
<![CDATA[#{javascript:search.getFacets()}]]>
</xp:this.value>
</xp:selectItems>
</xp:listBox>
<bx:select2PickerCombo id="select2PickerCombo1" for="searchFacets" formatSelection="#{javascript:search.init()}">
</bx:select2PickerCombo>
</p>
<xp:button value="Update" id="button2" styleClass="btn-sm btn-primary">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="result">
<xp:this.action>
<![CDATA[#{javascript:search.init();}]]>
</xp:this.action>
<xp:this.onComplete>
<![CDATA[XSP.partialRefreshGet("#{id:facets}");]]>
</xp:this.onComplete>
</xp:eventHandler>
</xp:button>
</xp:div>
如何直接通过Listbox / Select2选择器触发当前位于列表框下方按钮的代码?
答案 0 :(得分:3)
我不认为在使用bx:select2PickerCombo
控件时可以完成此操作。我能想到的唯一方法就是手动调用select2插件。
请注意,我仍在从Bootstrap4XPages插件加载select2库,但在这种情况下,您也可以直接将其添加到您的应用程序中,而不需要仅使用Bootstrap4XPages插件。
<xp:this.resources>
<xp:script
src="/.ibmxspres/.extlib/bootstrap/select2/select2.min.js"
clientSide="true">
</xp:script>
<xp:styleSheet
href="/.ibmxspres/.extlib/bootstrap/select2/select2.css"></xp:styleSheet>
<xp:styleSheet
href="/.ibmxspres/.extlib/bootstrap/select2/select2-bootstrap.css"></xp:styleSheet>
</xp:this.resources>
<xp:div
title="Facets"
id="facets">
<xp:text
escape="true"
id="computedField2"
value="#{javascript:(new Date()).getTime()}">
</xp:text>
<p>
<xp:listBox
id="searchFacets"
multiple="true"
value="#{sessionScope.searchFacets}">
<xp:selectItems>
<xp:this.value>
<![CDATA[#{javascript:['option 1', 'option 2']}]]>
</xp:this.value>
</xp:selectItems>
</xp:listBox>
</p>
<xp:scriptBlock
id="scriptBlock1">
<xp:this.value><![CDATA[
x$("#{id:searchFacets}").select2().on('change', function() {
console.log('value of select2 has changed...');
//call the event handler on the server, refresh a different target when it's done
$('[name="$$xspsubmitid"]').val('#{id:myEventHandler}');
XSP._partialRefresh("post", $("form")[0], '#{id:result}', {
onComplete : function() {
console.log('calling function in onComplete event');
XSP.partialRefreshGet("#{id:facets}");
}
});
});
]]></xp:this.value>
</xp:scriptBlock>
</xp:div>
<!--this is the event handler that gets called when the value changes -->
<xp:eventHandler
event="onclick"
id="myEventHandler"
submit="true"
refreshMode="none">
<xp:this.action>
<![CDATA[#{javascript:print('call init function here' + getComponent('searchFacets').getValue() );}]]>
</xp:this.action>
<xp:this.onComplete>
<![CDATA[XSP.partialRefreshGet("#{id:facets}");]]>
</xp:this.onComplete>
</xp:eventHandler>
<xp:div
id="result">
<xp:text
escape="true"
id="computedField1"
value="#{javascript:(new Date()).getTime()}">
</xp:text>
</xp:div>