无法触发h:selectonemenu onselect事件

时间:2011-06-09 08:54:10

标签: java jquery jsf jsf-2

<h:selectOneMenu id="queueSelectMenu" styleClass="selectOneMenue-style" 
    tabindex="1" value="#{reworkQueueMB.queueType}" onselect="alert('2');" >
    <f:selectItems value="#{queueMB.queueSelectItems}" />
</h:selectOneMenu>

当我选择selectmenu的项目时,我想获得select事件,但它不起作用。
我不想使用change事件,因为当我选择一个已经选中的项目时,change事件将再次被触发。

1 个答案:

答案 0 :(得分:1)

只有在文本输入字段(例如select<input>)中选择(突出显示)文本时,才会触发HTML DOM <textarea>事件。但<h:selectOneMenu>呈现HTML <select>元素,而不是<input>元素。它不允许您在字段中选择文本。 select事件在此处不执行任何操作。

从技术上讲,在每个click元素上设置<option>事件应该适合你。

<h:form id="formId">
    <h:selectOneMenu id="menuId" value="#{reworkQueueMB.queueType}">
        <f:selectItems value="#{queueMB.queueSelectItems}" />
    </h:selectOneMenu>
    <script>
        $("[id='formId:menuId'] option").click(function() {
            alert("2");
        });
    </script>
    ...

然而,这确实(不出所料)在任何IE浏览器中工作,甚至不是IE9。

你最好的选择是change事件。这是完全交叉浏览器。一个完全不同的替代方案是使用radiobutton组 - 它可以由<h:selectOneRadio>呈现。 click事件应该完全符合您的要求。

<h:selectOneRadio value="#{reworkQueueMB.queueType}" onclick="alert('2')">
    <f:selectItems value="#{queueMB.queueSelectItems}" />
</h:selectOneRadio>