示例代码:
<table class="grid">
<tr>
<td><a href="#" id="unit_floor_plan_preview">click me </a></td>
<td class="unitNumber"><span>Unit 1</span></td>
<td class="unitStatus">Open</td>
</tr><tr>
<td class="unitNumber"><span>Unit 2</span></td>
<td class="unitStatus">Sold</td>
</tr>
</table>
我能够获取所选行的行索引以获得确切的列数据。
tr = $('.grid').find('tr');
tr.bind('click', function(event) {
unitNo = $(this).find("td.unitNumber span").html();
alert(unitNo);
});
以上tr点击事件没问题。
我的问题现在是如何在点击表格行中的锚链接<td><a href="#" id="unit_floor_plan_preview">Show map </a></td>
时触发此tr绑定事件?
目标: 在处理锚定链接上的其余代码之前先获取
unitNo
(在tr.bind点击事件上处理)?
我尝试在锚链接点击事件中复制tr click功能,但在unitNo上获得 未定义 值。看我的代码:
$('a[id^="unit_floor_plan_preview"]').bind('click',function() {
var tr = $('.grid').find('tr');
unitNo = $(this).find("td.unitNumber span").html();
alert('From link: ' + unitNo);
});
答案 0 :(得分:4)
变化:
unitNo = tr.find("td.unitNumber span").html();
要:
unitNo = $(this).find("td.unitNumber span").html();
在$('a[id^="unit_floor_plan_preview"]').bind('click'
中,您尝试在"td.unitNumber span"
内找到$(this)
。问题是,this
指的是点击的链接,因此你永远找不到任何东西!
仅供参考,您可以轻松地重写该ENTIRE语句,如下所示:
$(document).on("click", '.grid tr, a[id^="unit_floor_plan_preview"]', function(e) {
e.stopPropagation(); // will prevent double click events from link being clicked within row
var unitNo = $.trim($(this).closest("tr").find(".unitNumber span").text()); // trim to remove end space, closest gets closest parent of selected type
if (e.target.tagName == "A") alert('From link: ' + unitNo);
else alert(unitNo);
});
答案 1 :(得分:0)
最好的方法是仅将事件绑定到tr
并使用event.target
检查它是否为tr或任何其他被点击的元素。这样您的点击事件就不会重复了。
这应该有效
var unitNo;
var tr;
tr = $('.grid').find('tr');
tr.bind('click', function (event) {
if ($(event.target).is('tr')) {
// If it is a tr that is clicked then just use find
unitNo = $(this).find("td.unitNumber span").html();
} else {
// If not tr find the closest tr and then find the element
unitNo = $(this).closest('tr').find("td.unitNumber span").html();
}
alert(unitNo);
});
<强> Check Fiddle 强>
答案 2 :(得分:0)
尝试:
var unitNo;
var tr = $('.grid').find('tr');
$('a[id^="unit_floor_plan_preview"]').on('click',function(e) {
e.stopPropagation();
unitNo = $(this).closest('tr').find("td.unitNumber span").html();
alert('From link: ' + unitNo);
});
tr.on('click', function(event) {
unitNo = $(this).find("td.unitNumber span").html();
alert(unitNo);
});
<强> jsFiddle example 强>
使用链接,您需要将DOM上移到行(通过.closest()
),然后使用.find()
返回同一行以查找要获取单位值的范围