jQuery - 在表中的元素上单击事件并获取元素值

时间:2010-08-11 13:08:05

标签: javascript jquery jquery-selectors

我在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()来   附上事件处理程序。

7 个答案:

答案 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。

中为您提供一系列td

答案 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>