我有以下内容:
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)也可以。
答案 0 :(得分:1)
您可以使用匿名函数:
$("#dataTable tbody").on("click", "tr", function(event) { gridClickHandler(oTable); } );
答案 1 :(得分:1)
如果在外部作用域中声明了变量oTable
,gridClickHandler
函数将可以访问它,因此您无需手动传递它。事实上,事件处理程序接收事件对象作为第一个参数,因此您实际上阴影 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');
}