$("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&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&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>
答案 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()
并传入的函数/处理程序将绑定到每个匹配的元素。