4

加载页面时,如果单击一行,它会记录到控制台clicked

但是,如果您对表格进行排序(单击表格标题),tr如果您尝试单击行,则不会触发单击事件。

我正在使用这个插件:tablefixedheader

jQuery

$(document).ready(function(){
    $("table.ex").fixheadertable({
        caption        : 'Tarefas Disponíveis',
        showhide    : false,
        height        : '265',
        zebra       : true,
        zebraClass  : 'ui-state-default',
        sortable    : true,
        sortedColId : 0,
        dateFormat  : 'Y/m/d',
        pager        : true,
        rowsPerPage    : 25,
        colratio    : [110,150],
        minColWidth : 110,
        resizeCol    : true
    });

    // problem with this click
    // The event isn't triggered:

    $("table.ex tr").click(function(){
        console.log('clicked');
    });

});

演示 http://jsfiddle.net/QpU3c/

4

2 回答 2

12

您应该使用事件委托,因为插件会更改原始tr元素,因此它们会丢失附加的事件处理程序。处理程序应该附加在表本身上,因为它肯定不会改变。

$("table.ex").on('click', 'tr', function(){
    console.log('clicked');
});

jsFiddle 演示

于 2012-06-21T16:24:23.220 回答
4
$("table.ex").on('click', 'tr', function(){
    console.log('clicked');
});

演示


笔记

您需要委托事件,因为当您对 s 进行排序时table.fixheadertable()会删除trs 并重新将其附加到表中。因此,在排序之后,这些trs 被视为动态元素。


.on()委托事件的语法如下:

$(container).on(eventName, target, handlerFunction)
于 2012-06-21T16:24:20.730 回答