为什么当鼠标点击表格行时我无法获得行ID?

时间:2011-06-03 15:30:02

标签: javascript jquery html jquery-ui javascript-events

我有一个 index.html 页面,其中包含一个表格:

<body>
      <table class="mytable">
          <tr id="1">
              <td>John</td>
              <td>123</td>
          </tr>
           <tr id="2">  
              <td>Kate</td>
              <td>456</td>
          </tr>
      </table>

  <script src="my.js"></script>
  </body>

我在页面中包含了 my.js ,我试图通过以下方式获取鼠标点击行的 id my.js

$('.mytable tr').click(function(e){
                   alert('clicked.'); //even did not get alert here.
                   var rowId = $(this).attr('id');
               alert(rowId);
        });

但是我没有得到点击行的行ID(没有警报),我在哪里错了?

--- ---解决方案

我的坏,我有一个地方清空了桌子,这意味着根本没有tr。这就是为什么它不起作用。抱歉打扰。

5 个答案:

答案 0 :(得分:5)

  1. $ === jQuery
  2. 绑定点击侦听器的代码是否在document ready handler
  3. 中执行
  4. this.id is sufficient and will work in all browsers.

答案 1 :(得分:1)

这似乎工作得很好......这是一个使用alert而不是console.log的工作JSFiddle:

http://jsfiddle.net/gfosco/KtYkJ/

根据评论和Matt的回答,你应该像这样包装你的函数:

$(document).ready(function() {
    $('.mytable tr').click(function(e){
               var rowId = $(this).attr('id');
           alert(rowId);
    });
});

javascript在DOM准备好之前执行,因此处理程序没有被应用。

答案 2 :(得分:1)

It's working for me

如果不是id,你会得到做什么

最常见的问题是事件处理程序没有绑定到元素,最常见的解决方案是将其包装在$(document).ready(){ ... }中,以便在绑定到元素之前等待DOM加载。

(还有相对较新的.live()函数binds to elements as they get added in the life of the document。)

答案 3 :(得分:1)

首先你必须检查你的js文件路径是否正确? 如果这是正确的,那么我认为你的脚本没有任何错误.. 我也测了一下......你可以检查一下 Demo

答案 4 :(得分:0)

将您的事件处理程序更改为

$('.mytable tr').each(function() {
    $(this).click(function() {
        var rowId = $(this).attr("id");
        alert(rowId);
    });
});