jquery触发器表行单击事件

时间:2013-06-18 17:36:33

标签: javascript jquery

示例代码:

<table class="grid">
    <tr>
        <td><a href="#" id="unit_floor_plan_preview">click me &nbsp;</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 &nbsp;</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);

});

测试代码: http://jsfiddle.net/VjkML/29/

3 个答案:

答案 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);
});

Example

答案 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()返回同一行以查找要获取单位值的范围