如何使用jQuery选择JSF组件?

前端之家收集整理的这篇文章主要介绍了如何使用jQuery选择JSF组件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用PrimeFaces和JSF组件来实现jQuery,但是它不能正常工作。当我尝试使用与HTML标签相同时,它正常工作。

以下是带有jQuery的HTML标签代码

<input type="checkBox" id="check2"></input>
<h:outputText value="Check the Box,if your permanent address is as same as current address."></h:outputText> 
<h:message for="checkBox" style="color:red" />

$("#check2").change(function() {
    if ($("#check2").is(":checked")) {
        $("#p2").hide();
    } else {
        $("#p2").show();
    }
});

这是PrimeFaces / JSF的代码,它不能与jQuery正常工作:

<p:selectManyCheckBox >
    <f:selectItem itemLabel="1" value="one" id="rad" ></f:selectItem>
</p:selectManyCheckBox>

$("#rad").change(function() {
    if ($("#rad:checked").val() == "one") {
        $("#p2").hide();
    } else {
        $("#p2").show();
    }  
});

解决方法

您应该意识到jQuery可以在客户端的HTML DOM树中使用。 jQuery不像JSF源代码那样直接在JSF组件上工作,而是直接使用JSF组件生成的HTML DOM树。您需要在webbrowser中打开该页面,然后右键单击“查看源”。您将看到,JSF使用以下内容将前缀添加了具有所有父 NamingContainer组件(例如< h:form>,< h:dataTable>等)的ID的生成的HTML输入元素的ID作为默认分隔符。例如
<h:form id="foo">
    <p:selectManyCheckBox id="bar" />
    ...

将最终生成的HTML作为

<form id="foo" name="foo">
    <input type="checkBox" id="foo:bar" name="foo:bar" />
    ...

您需要根据该ID选择元素。然而:表示伪选择器的CSS标识符中的特殊字符。要在jQuery中使用CSS选择器在ID中选择一个元素,则需要通过反斜杠转义或使用[id = …]属性选择器或仅使用旧的getElementById():

var $element1 = $("#foo\\:bar");
// or
var $element2 = $("[id='foo:bar']");
// or
var $element3 = $(document.getElementById("foo:bar"));

作为替代,您也可以使用类名:

<x:someInputComponent styleClass="someClassName" />

最终在HTML中

<input type="..." class="someClassName" />

所以你可以得到它

var $elements = $(".someClassName");

这允许更好的抽象和可重用性。当然这些元素并不是独一无二的。只有主要的布局元素,如标题菜单内容和页脚是非常独特的,但它们通常不在NamingContainer中。

作为另一个替代方案,您可以将HTML DOM元素本身传递到函数中:

<x:someComponent onclick="someFunction(this)" />
function someFunction(element) {
    var $element = $(element);
    // ...
}

也可以看看:

> How to use JSF generated HTML element ID with colon “:” in CSS selectors?
> How to refer to a JSF component Id in jquery?
> By default,JSF generates unusable ids,which are incompatible with css part of web standards

原文链接:https://www.f2er.com/jquery/183617.html

猜你在找的jQuery相关文章