如何使用jQueryselectJSF组件?
我正试图用PrimeFaces和JSF组件来实现jQuery,但是它不能正常工作。 当我试图做与HTML标签一样的工作正常。
这里是HTML代码与jQuery正常工作的代码:
<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组件上工作,但jQuery直接与由这些JSF组件生成的HTML DOM树一起工作。 您需要在网页浏览器中打开该页面,然后右键单击然后查看源代码 。 您将看到,JSF将生成的HTMLinput元素的ID与所有父NamingContainer
组件的ID(例如<h:form>
, <h:dataTable>
等)一起预先设置为默认分隔符。 所以例如
<h:form id="foo"> <p:selectManyCheckbox id="bar" /> ...
将以生成的HTML结尾
<form id="foo" name="foo"> <input type="checkbox" id="foo:bar" name="foo:bar" /> ...
您需要按照该ID来select元素。 不过:
CSS标识符中的特殊字符代表伪select器。 要使用jQuery中的CSSselect器在ID中select一个元素,您需要通过反斜杠或使用[id=...]
属性select器或使用旧的getElementById()
来转义它:
var $element1 = $("#foo\\:bar"); // or var $element2 = $("[id='foo:bar']"); // or var $element3 = $(document.getElementById("foo:bar"));
如果在ID中看到自动生成的j_idXXX
部分,其中XXX
表示增量编号,则必须给予特定组件一个固定的ID,因为增量编号是dynamic的,并且会根据组件在树中的物理位置而发生变化。
作为一种select,您也可以使用类名称:
<x:someInputComponent styleClass="someClassName" />
它以HTML结尾
<input type="..." class="someClassName" />
这样你就可以得到它
var $elements = $(".someClassName");
这允许更好的抽象和可重用性。 这些元素当然不是独一无二的 。 只有标题,菜单,内容和页脚等主要布局元素才是唯一的,但它们通常不在NamingContainer
。
作为另一种select,您可以将HTML DOM元素本身传递给函数:
<x:someComponent onclick="someFunction(this)" />
function someFunction(element) { var $element = $(element); // ... }
也可以看看:
- 我怎样才能知道一个JSF组件的ID,所以我可以在Javascript中使用
- 如何在CSSselect器中使用带有冒号“:”的JSF生成的HTML元素ID?
- 默认情况下,JSF生成不可用的ID,这与Web标准的CSS部分不兼容
- 在JSF复合组件中集成JavaScript,干净的方式
你也可以使用jQuery“Attribute Contains Selector”(这里是url http://api.jquery.com/attribute-contains-selector/ )
例如,如果你有一个
<p:spinner id="quantity" value="#{toBuyBean.quantityToAdd}" min="0"/>
而你想对它的对象做些什么,你可以select它
jQuery('input[id*="quantity"]')
如果你想打印它的价值,你可以做到这一点
alert(jQuery('input[id*="quantity"]').val());
为了知道元素的真正的html标签,你可以使用萤火虫或开发人员工具或查看源代码,始终查看真正的html元素(在这种情况下,微调被翻译成input)…
丹尼尔。
如果你使用RichFaces
你可以检查rich:jQuery
组件。 它允许你指定jQuery
组件的服务器端id。 例如,你有组件的指定服务器ID,那么你可以应用任何jQuery
相关的东西在下一个方法: <rich:jQuery selector="#<server-side-component-id>" query="find('.some-child').removeProp('style')"/>
。
欲了解更多信息,请检查doumentation 。
希望它有帮助。
看,这将帮助你,当我select经验=是的我的对话框,其中id是dlg3是popup.and如果值是否将不会打开