0

我有一个 Rich:tabPanel,里面有几个标签。我想使用 jquery 记录每个选项卡上的更改,以便在选项卡内进行更改时更改选项卡的背景图像。

它看起来像这样:

<h:form id="form">
    <rich:jQuery selector="#tab1_lbl" query="addClass('testClass')" timing="onload"/>
        <rich:tabPanel switchType="client" id="tabContainer">
            <rich:tab id="tab1" label="tab1" title="tab1" >
                 tab1
            </rich:tab>

            <rich:tab id="tab2" label="tab2">
                 tab2
            </rich:tab>
       </rich:tabPanel>
</h:form>

我让选择器说 #tab_lbl 的原因是因为由此生成的 html 看起来像这样:

<td id="form:tab1_lbl" class="dr-tbpnl-tb rich-tab-header dr-tbpnl-tb-act rich-tab-active " title="tab1" onmouseout="RichFaces.outTab(this);" onmouseover="RichFaces.overTab(this);">
tab1
</td>

现在我也尝试像这样指定选择器 selector="#form:tab_lbl" ,但我仍然无法将类添加到这个 td 元素。这有什么原因吗?如果我在不使用richfaces tabPanel 的情况下创建一个新表,我可以轻松地使用这种添加具有相同选择器的类的方式,但它在此示例中不起作用。

有任何想法吗?

编辑:我想补充一点,如果我使用 firebug 并手动添加类,我会得到我正在寻找的结果。

4

1 回答 1

2

rich:jQuery如果可以将其与组件匹配,它将为您找到正确的 ID。来自Richfaces 开发人员指南

当您定义一个选择器时,RichFaces 会检查其内容并尝试将选择器 id 中定义的内容替换为组件 id(如果找到)。

另请查看当您要指定确切ID 时给出的示例:

<rich:jQuery selector="#form\\:menu img" query="..." />

(注意双反斜杠转义冒号)

您可以将#tab1其用作选择器,而 rich:jQuery 会将其替换为正确的 ID。但是,这会找到选项卡,并且您需要选项卡标签。

因此,找到标签的一种更可靠的方法可能是找到标签(如果您移动页面或为表单提供 id,那么它仍然可以工作)将是找到标签,然后是标签的子标签。所以一个可能的选择器是:

#tab1/../td.rich-tab-header
于 2009-07-06T08:40:35.993 回答