【问题标题】:Isuue with getting the value of inputHidden from a4j:form by javascript获取输入值的问题 Hidden from a4j:form by javascript
【发布时间】:2011-09-04 01:27:25
【问题描述】:

我有以下问题。我需要从 javascript 中获取 a4j:form 中的隐藏值。

<a4j:form id="orderModalFormId">
    <h:form style="display:none;" prependId="false">
            <h:inputHidden id="maxVal" value="#{bean.maxVal}"/>
    </h:form>

    //...rest code where javascript is used

</a4j:form>

在javascript中

...    
var maxValue =  jQuery('#orderModalFormId : maxVal').val();
...

问题是在 javascript 调试期间 maxValue 仍未定义。 我是 javascript 和 jQuery 的新手。 诡计在哪里? 谢谢!

【问题讨论】:

    标签: javascript jquery jsf hidden-field ajax4jsf


    【解决方案1】:

    从心理上创建 HTML 很棘手,但您几乎可以肯定只需要一个简单的 id 选择器:

    var maxValue = jQuery('#maxVal').val();
    

    从编辑看来,你需要这个:

    var maxValue = jQuery('#orderModalFormId\\:maxVal');
    

    您需要转义 : 以便 jQuery 不会将其解析为伪选择器。您需要使用转义反斜杠 (\\:),以便 Javascript 不会将 \: 解释为转义冒号。

    See jsFiddle for an example of an escaped colon in an id selector.

    【讨论】:

    • 生成的HTML id是orderModalFormId:maxVal
    • 在这种特殊情况下,是的。但其他方式可能对您的情况更有用,例如变量中的 "orderModalFormId:maxVal" 或单独的 "maxVal"
    【解决方案2】:

    : 是 CSS 选择器中的非法字符,这些空格并不能使它变得更好。

    要么使用好的 ol' JS:

    var value = document.getElementById("orderModalFormId:maxVal").value;
    

    或者用双反斜杠转义:

    var value = jQuery("#orderModalFormId\\:maxVal").val();
    

    或者使用jQuery属性选择器:

    var value = jQuery("id=['orderModalFormId:maxVal']").val();
    

    或者当 JS 嵌入到 JSF 页面中时(并且您已经在使用 RichFaces):

    var value = #{rich:component('maxVal')}.val();
    

    【讨论】:

      【解决方案3】:

      实际上,你们俩在语法上都是对的,但问题是另一种性质的。 看来我的 ajax 表单无法正常使用我的 javascript,所以我所做的只是通过 ui:include 将 maxVal 的参数路径输入到这个 a4j:form 中(我的 a4j:form 在单独的 xhtml 文件中)。像这样:

      mainPage.xhtml

      <h:form style="display:none;" prependId="false">
         <h:inputHidden id="maxVald" value="#{mainBean.maxVal}"/>
      </h:form>
      
      <ui:include src="/xhtml/include/orderModalForm.xhtml">
          <ui:param name="maxVal" value="#{mainBean.maxVal}"/>
      </ui:include>
      

      在javascript中我确实喜欢这个

      var maxFreezePeriod =  jQuery('#maxFreezePeriod').val();
      

      感谢您的回答:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-28
        • 2013-08-29
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多