1

我是 JavaScript 新手。我需要帮助来修改这个脚本。当我单击表格行时,我希望使用按钮的唯一 ID 调用下面的按钮。

$(document).ready(function(){
        $(selector).click(); //selector = h:commandLink
});


$(selector).find('tr').each(function(){ //selector = h:dataTable
        $(this).click(function(){
                $(selector).trigger('click'); //selector = h:commandLink       
        });
});

<h:commandLink id="lnkHidden" action="#{bean.pageRedirect}" style="text-decoration:none; color:white; display:none">

</h:commandLink>

你能帮我解决这个问题吗?

PS这是表格的代码:

<h:form id="form" >
<!-- The sortable data table -->
<h:dataTable id="dataTable" headerClass="columnHeader" value="#{bean.dataList}" binding="#{table}" var="item">
    <!-- Check box -->
    <h:column>
        <f:facet name="header">
            <h:selectBooleanCheckbox style="margin-left: 0px;" value="#{bean.value}" class="checkall" >
                <f:ajax listener="#{bean.value}" render="@form" />
            </h:selectBooleanCheckbox>
        </f:facet>
        <h:selectBooleanCheckbox  onclick="highlight(this);" value="#{bean.value" >
            <!-- if the user deselects one row deselect the main checkbox -->
            <f:ajax listener="#{bean.deselectMain}" render="@form" />
        </h:selectBooleanCheckbox>
        <!-- Click on table code -->
        <h:commandLink id="lnkHidden" action="#{bean.pageRedirect}" style="text-decoration:none; color:white; display:none">

        </h:commandLink>
    </h:column>
    <!-- Row number -->
    <h:column>
        <f:facet name="header">
            <h:outputText value="№" />
        </f:facet>
        <h:outputText value="#{bean.value}" />
    </h:column>
..........

</h:dataTable>

这是生成到 Web 浏览器中的代码的一部分:

<tr class="">
<td>
<input id="form:dataTable:1:j_idt17" type="checkbox" onclick="jsf.util.chain(this,event,'highlight(this);','mojarra.ab(this,event,\'valueChange\',0,\'@form\')')" name="form:dataTable:1:j_idt17">
<a id="form:dataTable:1:lnkHidden" onclick="mojarra.jsfcljs(document.getElementById('form'),{'form:dataTable:1:lnkHidden':'form:dataTable:1:lnkHidden'},'');return false" style="text-decoration:none; color:white; display:none" href="#"></a>
</td>
<td>2</td>
<td>35435</td>
4

3 回答 3

2

使用 JSP(或任何语言)时,id属性就是您想要用于定位元素的属性,但这有点棘手,因为它以复杂的方式生成它们。

由于您需要处理点击表格行,您可以绑定事件并触发click事件,如下所示:

$('table[id$="dataTable"]').find("tbody").on("click", "tr", function () {
    $(this).find('a[id$="lnkHidden"]').trigger("click");
});

这也需要在$(document).ready处理程序内部。

这会将一个事件处理程序绑定click<table>. 单击a 时<tr>,此处理程序运行,并this引用特定行。有了这个,我找到了<a>包含在该行中的 (linkBut​​ton),以及id您要定位的特定对象,并触发它的click事件。

我找到链接按钮的方式是使用“属性”([name])和“结束于”($=)选择器。所有生成的元素都有一个id以原始id集合结尾(更多信息,在内部使用,在开头id)......这就是引擎生成它们的方式。

我不确定您在document.ready处理程序中尝试做什么,但如果需要为click我们所针对的所有 commandLinks 触发事件,您可以使用:

$('a[id$="lnkHidden"]').trigger("click");

所以我要使用的最终代码是:

$(document).ready(function () {
    $('table[id$="dataTable"]').find("tbody").on("click", "tr", function () {
        $(this).find('a[id$="lnkHidden"]').trigger("click");
    }).on("click", 'a[id$="lnkHidden"]', function (e) {
        e.stopPropagation();
    });
});
于 2013-04-08T19:15:06.327 回答
2

由于事件会在 DOM 树中冒泡,如果您<tr>在您的内部,<h:commandLink>那么点击事件将冒泡并触发。

如果你<h:commandLink>在你的里面<tr>,那么你的选择语法是错误的。当你这样做时:

$(selector).find('tr')

这是试图<tr><h:commandLink>.

一件大事是您的代码按原样在表中的每一行上附加事件侦听器。这是不好的做法,因为 JavaScript 事件会冒泡。您应该做的是这样的事情,假设您要单击的 ( selector) 实际上在您的行内:

$('table').on('click', 'tr', function() {
    $(this).find(selector).click();
});

这会将事件处理程序绑定到 all<table>以侦听<tr>元素的点击。

于 2013-04-08T19:24:23.073 回答
1

你说when I click on a table row这意味着你需要为每一行注册一个点击事件,在这种情况下你不需要使用each,而是你可以使用

$('table#dataTable').on('click', 'tr', function(){
    // here your code goes to click the button with ID lnkHidden
    $('#lnkHidden').trigger('click');

    // after the update of your question
    $(this).find('td:first a').trigger('click');
});
于 2013-04-08T19:26:34.183 回答