2012-07-29 125 views
0

我有以下几点:如何将事件和参数传递给javascript函数?

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'); 

我被告知,$(本)事件将被传递给函数,但我还需要通过别的东西,因为我发现它给出了与oTable错误。

如何修改我对gridClickHandler和gridClickHandler函数的调用,以便它传递对oTable的引用,并且$(this)也起作用。

回答

1

,该gridClickHandler功能将有机会获得它,所以你不需要手动传递。事实上,事件处理程序接收事件对象作为第一个参数,所以你实际上是shadowing 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元件。

+0

对不起,但我不确定你在o范围外声明的意思。 oTable在一个.js文件中声明,并且gridClickHandler在具有函数gridClickHandler(oTable)的另一个文件中声明{ – Alan2 2012-07-29 16:42:01

+0

您能解释为什么不使用函数声明吗?谢谢。 – Alan2 2012-07-29 16:53:19

+0

@Gemma是'oTable'一个全局变量?如果不是,第二个.js文件如何访问它? (一个.js文件的非全局变量,其他.js文件无法访问,除非您明确地将该值附加到某种共享对象上。) – 2012-07-29 16:56:27

1

你可以使用匿名函数:如果变量oTable外部范围中声明

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

我试过,但代码内幕gridClickHandler似乎并不知道$(本) – Alan2 2012-07-29 16:42:42

+0

你有什么期望$(这)是? – Simon 2012-07-29 17:09:40

+0

我需要它是我点击的行。 – Alan2 2012-07-29 17:15:32

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'); 
} 
+0

我之前尝试过。 oTable在gridClickHandler中似乎不可用。 – Alan2 2012-07-29 16:52:18

+0

我在第一个字符串后添加了一个字符串。尝试这个。 – Kir 2012-07-29 16:54:18

+0

您是否尝试过使用我的脚本的更正版本? – Kir 2012-07-29 17:18:44

相关问题