通过子项操作来检查表格行中的复选框

时间:2010-06-07 17:31:49

标签: jquery checkbox html-table

$("tr.clickable").each(function() {$(this).click(function() {
            $(this).children("td:first > input").is(":checked") ?
                    $(this).children("td:first > input").removeAttr("checked") :
                    $(this).children("td:first > input").attr("checked","checked");
        })});

这只会检查我表格中的第一行(无论我点击哪一行)。如何应用它以便检查我单击的特定行上的输入?

HTML:

    <tbody style="height: 500px; overflow-x: hidden; overflow-y: scroll;">
                                                <tr id="row0" class="alternate clickable">
                        <td>                            <img width="11" height="11" title="This email failed to send." alt="Failed" src="images/error_warning.png">
                                                    <br>
                            <input type="checkbox" value="6751" name="emailCheck[]" class="emailCheck"></td>
                        <td><a href="user_settings.php?id=349">
                            wmiller                 </a></td>
                        <td>New Fin-iQ Message</td>
                        <td><span class="errorText">UNKNOWN</span></td>
                        <td>New Bulletin Notification</td>
                        <td>Jun. 07/10 10:14:39 am</td>
                        <td><a href="emails_report.php?action=re&amp;id=6751">Resend</a>
                            <br>
                            <a id="emailBodyToggle_6751" href="javascript:showEmail(6751)">Show</a>
                        </td>
                    </tr>
<tr id="emailBody_6751" style="display: none; text-align: left;" class="alternate">
                    <td colspan="7"><div>...</div></td>
                </tr>
                                                <tr id="row1" class=" clickable">
                    <td>                            <img width="11" height="11" title="This email failed to send." alt="Failed" src="images/error_warning.png">
                                                <br>
                        <input type="checkbox" value="6752" name="emailCheck[]" class="emailCheck"></td>
                    <td><a href="user_settings.php?id=350">
                        mholman                 </a></td>
                    <td>New Fin-iQ Message</td>
                    <td><span class="errorText">UNKNOWN</span></td>
                    <td>New Bulletin Notification</td>
                    <td>Jun. 07/10 10:14:39 am</td>
                    <td><a href="emails_report.php?action=re&amp;id=6752">Resend</a>
                        <br>
                        <a id="emailBodyToggle_6752" href="javascript:showEmail(6752)">Show</a>
                    </td>
                </tr>

                <tr id="emailBody_6752" style="display: none; text-align: left;" class="">
                    <td colspan="7"><div>...</div></td>
                </tr>

2 个答案:

答案 0 :(得分:4)

尝试删除第一个选择器上的.each()调用。 jQuery使用“隐含迭代”,这意味着你可以做这样的事情:

$('tr.clickable').click(function () { // Do things here. });

你最终应该在每一行上都有一个点击功能。

在弄乱你的小提琴后,我得到了这个工作:

$("tr.clickable").click(function() {
    $(this).find("td:first input").is(":checked") ? $(this).find("td:first input").removeAttr("checked") : $(this).find("td:first input").attr("checked","checked");
});

答案 1 :(得分:0)

您可以像这样切换代码:

$("tr.clickable").click(function() {
    var cb = $("td:first > input", this)[0];
    cb.checked = !cb.checked;
});​

You can view a demo on it here

使用核心JavaScript方法和.checked DOM attribute,只使用jQuery for selectors,这更清晰/更快且仍然跨浏览器兼容。

网站注释:绑定像.click()这样的处理程序时,不需要.each(),只需直接调用.click()并传入的函数/处理程序将绑定到每个匹配的元素。