使用 jQuery 更改 p:selectOneMenu 的项目

Change item of p:selectOneMenu using jQuery

我有一个 PrimeFaces 5.1 <p:selectOneMenu> 在 DOM 中生成以下 select:

<select id="WorkSpace:test:selectYear_input" 
    name="WorkSpace:test:selectYear_input" tabindex="-1">
    <option value="" selected="selected">-- Year --</option>
    <option value="2015">2015</option>
    <option value="2014">2014</option>
    <option value="2013">2013</option>
    <option value="2012">2012</option>
    <option value="2011">2011</option>
    <option value="2010">2010</option>
    <option value="2009">2009</option>
</select>

我有一个 <p:commandButton> 可以触发一个 jQuery 函数来处理更改我的 <p:selectOneMenu>

<p:commandButton onclick="changeDropDownList();" />

jQuery函数:

function changeDropDownList()
{
    $('[id$=selectYear_input]')[0].selectedIndex = 2;
}

<p:selectOneMenu>未更新。这是怎么造成的,我该如何解决?

<p:selectOneMenu> 基本上是 <select><option> 之上的 <div><ul><li> 层,在视觉上是隐藏的。 DOM 中对 <select><option> 的任何更改都不会反映在 <div><ul><li> 中。它只会以相反的方式发生。

它有一堆附加的事件侦听器,应该反映在隐藏 <select><option> 中。一种方法是在菜单面板中感兴趣的 .ui-selectonemenu-item 上触发 click 事件。

给定一个

<p:selectOneMenu widgetVar="selectYear">

您可以 select jQuery 中的第 3 项,如下所示

PF("selectYear").panel.find(".ui-selectonemenu-item:eq(2)").click();

或者,您也可以通过 <p:ajax>(在幕后最终使用 jQuery 的 $.ajax()):

<p:selectOneMenu id="selectYear" value="#{bean.selectYear}">
    ...
</p:selectOneMenu>
...
<p:commandButton ...>
    <p:ajax listener="#{bean.setSelectYear(2014)}" update="selectYear" />
</p:commandButton>

这只是一个小往返。

根据 3.4 到 5.1 的 PF 文档,如果在 p:selectOneMenu 上分配 widgetVar 属性,则可以在小部件上调用 selectValue(value)。

这会 select 指定值,但假定您知道目标值字符串和大小写。

它不适用于数字索引。