2012-07-29 171 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

相關問題