我有一个 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。这就是为什么它不起作用。抱歉打扰。
答案 0 :(得分:5)
$ === jQuery
? 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)
如果不是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);
});
});