如何将事件和参数传递给javascript函数?

时间:2012-07-29 16:23:31

标签: jquery

我有以下内容:

var oTable = $('#dataTable').dataTable({
    iDisplayLength: -1,
    ...
    ...

$("#dataTable tbody").on("click", "tr", gridClickHandler);

function gridClickHandler(oTable) {
    $(oTable.fnSettings().aoData).each(function () {
        $(this.nTr).removeClass('row_selected');
    });
    $(this).addClass('row_selected');

我被告知$(this)事件将被传递给函数,但我还需要传递其他内容,因为我发现它给出了与oTable相关的错误。

如何修改对gridClickHandler和gridClickHandler函数的调用,以便将引用传递给oTable,同时$(this)也可以。

3 个答案:

答案 0 :(得分:1)

您可以使用匿名函数:

$("#dataTable tbody").on("click", "tr", function(event) { gridClickHandler(oTable); } );

答案 1 :(得分:1)

如果在外部作用域中声明了变量oTablegridClickHandler函数将可以访问它,因此您无需手动传递它。事实上,事件处理程序接收事件对象作为第一个参数,因此您实际上阴影 TABLE引用。

例如:

var foo = 123;

var clickHandler = function ( foo ) {    
    // here, foo is not 123, but the event object  
    // the outer variable foo is shadowed by the local variable foo  
};

只需删除第一个参数:

var gridClickHandler = function () {

现在,从外部范围检索oTable

(另请注意,我如何将匿名函数表达式赋给变量,而不是使用函数声明。)

顺便说一句,在函数内部,this指的是TR元素。

答案 2 :(得分:0)

试试这个:

$("#dataTable tbody").on("click", "tr", gridClickHandler);
gridClickHandler.oTable = oTable;

function gridClickHandler(event) {
    $(oTable.fnSettings().aoData).each(function () {
        $(this.nTr).removeClass('row_selected');
    });
    $(event.target).addClass('row_selected');
}