javascript - 如何在Javascript方法中使用clientId获取selectOneMenu的值?

标签 javascript jquery jsf primefaces

我有一个包含 selectOneMenu 的数据表。我想通过使用 clientId 在我的 Javascript 方法中获取 selectOneMenu 的选定值。我尝试过以下代码..

 <p:dataTable var="name" value="#{model.nameList}" rowIndexVar="rowIndex">
<p:selectOneMenu id="selector_#{rowIndex}" onchange="select(#{rowIndex});">
            <f:selectItem itemLabel="Select" itemValue=""></f:selectItem>
            <f:selectItem itemLabel="Month" itemValue="Month"></f:selectItem>
            <f:selectItem itemLabel="Week" itemValue="Week"></f:selectItem>
        </p:selectOneMenu>
</p:dataTable>

<script type="text/javascript">
    function select(rowIndex){
        selector = "selector_" + rowIndex;
        var element = $("select[name$=" + selector +" option:selected").val();

        alert(element);
    }
</script>
<小时/>

我需要 JavaScript 方法中的两个值,rowIndex 和 selectOneMenu 的选定值

最佳答案

给你:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" template="/WEB-INF/templates/globalTemplate.xhtml">

    <ui:define name="title">15320268</ui:define>
    <ui:define name="content">
        <p:growl id="growl" showDetail="true" />

        <h:form>
            <p:dataTable var="name" value="#{so15320268.nameList}" rowIndexVar="rowIndex" widgetVar="table">                
                <p:column>
                    <p:selectOneMenu widgetVar="menu_#{rowIndex}" onchange="select(menu_#{rowIndex});">
                        <f:selectItem itemLabel="Select" itemValue=""></f:selectItem>
                        <f:selectItem itemLabel="Month" itemValue="Month"></f:selectItem>
                        <f:selectItem itemLabel="Week" itemValue="Week"></f:selectItem>
                    </p:selectOneMenu>
                </p:column>
            </p:dataTable>
        </h:form>
        <script type="text/javascript">
            function select(widgetVar){
                var selectMenuDiv = widgetVar.getJQ(); // it will give you the underlying jquery object
                //alert(selectMenuDiv.get(0)); // uncoment this line it will show: [object HTMLDivElement]; 
                // so it is not select element
                var selectMenu = $(selectMenuDiv).find('select');
                var selectValue = $('> option:selected', selectMenu).val();
                alert(selectValue);             
            }
        </script>
    </ui:define>
</ui:composition>

看看下面的图片,就是这样<p:selectOneMenu/>呈现: enter image description here

仔细查看突出显示的 div 的 id。它以 selector_ 结尾。 xhtml 是:<p:selectOneMenu id="selector_#{rowIndex}" 。您试图使用 el 创建 id,而在 JSF 中这是不允许的,这就是 #{rowIndex} 的原因。没有为 id 呈现。 documentation表示 id 必须评估为 java.lang.String如果它确实支持 el 那么这将是

javax.el.ValueExpression(must evaluate to java.lang.String)

可能原因是在方法 public void setValueExpression(String name, ValueExpression binding) 中的javax.faces.component.UIComponentif (!(binding.isLiteralText())) .

希望它能帮助你理解 el 不能用在 id 中。

关于javascript - 如何在Javascript方法中使用clientId获取selectOneMenu的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15333050/

相关文章:

javascript - 单击时内容未加载到 Div(w.jQuery)

javascript - 使用 jQuery 或 javascript 从 URL 获取元描述

jsf - 为 Primefaces 表创建编辑表单

javascript - 在 JSF 中将 JSON 写入 HTTP 响应

jsf - Primefaces p :messages won't show first FacesMessage

javascript - 无法通过 JavaScript 从输入中获取值

javascript - 访问 require-d 类的未定义方法时没有 TypeScript 错误

javascript - 异步加载的外部脚本,除非它被显式打开

javascript - 将图像从桌面拖放到浏览器,而不是通过输入进行搜索

javascript - jQuery 在 iF​​rame 中像 iPhone 一样拖动滚动