我在JSP文件中有以下HTML:
<div class="custList">
<table class="dataGrid">
<c:forEach var="cust" items="${custList}">
<tr>
<td>${cust.number}</td>
<td>${cust.description}</td>
<td>${cust.type}</td>
<td>${cust.status}</td>
</tr>
</c:forEach>
</table>
</div>
我需要能够在每个动态创建的'click'
代码上触发<tr>
事件,并且还能够访问<td>
代码的值(已点击的{ {1}})来自JavaScript函数。我已经有了这个功能,但遗憾的是它似乎没有用。
<tr>
更新(2016年1月):不推荐使用jQuery.live(如下所示:http://api.jquery.com/live/)
从jQuery 1.7开始,不推荐使用.live()方法。使用.on()来 附上事件处理程序。
答案 0 :(得分:36)
除非另有说明(<tfoot>
,<thead>
),否则浏览器会将<tr>
隐式放入<tbody>
。
您需要在> tbody
和> table
之间加> tr
:
$("div.custList > table > tbody > tr")
或者,您也可以不那么严格地选择行(>
表示立即子项):
$("div.custList table tr")
也就是说,您可以通过$(this).children('td')
在那里立即<td>
个孩子。
答案 1 :(得分:18)
尝试jQuery的delegate()
函数,如下所示:
$(document).ready(function(){
$("div.custList table").delegate('tr', 'click', function() {
alert("You clicked my <tr>!");
//get <td> element values here!!??
});
});
委托的工作方式与live()
的工作方式相同,只是live()
无法应用于已链接的项目,而delegate()
则允许您指定要处理的元素中的元素。< / p>
答案 2 :(得分:6)
这项工作适合我!
$(document).ready(function() {
$(document).on("click", "#tableId tbody tr", function() {
//some think
});
});
答案 3 :(得分:4)
由于TR元素包裹了TD元素,你实际点击的是TD(它然后冒泡到TR),因此你可以简化你的选择器。以这种方式获取值也更容易,点击的TD就是这个,包裹它的TR是this.parent
将您的javascript代码更改为以下内容:
$(document).ready(function() {
$(".dataGrid td").click(function() {
alert("You clicked my <td>!" + $(this).html() +
"My TR is:" + $(this).parent("tr").html());
//get <td> element values here!!??
});
});
答案 4 :(得分:2)
$(this).find('td')
将在tr。
答案 5 :(得分:2)
$("body").on("click", "#tableid tr", function () {
debugger
alert($(this).text());
});
$("body").on("click", "#tableid td", function () {
debugger
alert($(this).text());
});
答案 6 :(得分:-4)
<script>
jQuery(document).ready(function() {
jQuery("tr").click(function(){
alert("Click! "+ jQuery(this).find('td').html());
});
});
</script>