如何将事件和参数传递给javascript函数?
问题描述:
我有以下几点:如何将事件和参数传递给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)也起作用。
答
,该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元件。
答
试试这个:
$("#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');
}
对不起,但我不确定你在o范围外声明的意思。 oTable在一个.js文件中声明,并且gridClickHandler在具有函数gridClickHandler(oTable)的另一个文件中声明{ – Alan2 2012-07-29 16:42:01
您能解释为什么不使用函数声明吗?谢谢。 – Alan2 2012-07-29 16:53:19
@Gemma是'oTable'一个全局变量?如果不是,第二个.js文件如何访问它? (一个.js文件的非全局变量,其他.js文件无法访问,除非您明确地将该值附加到某种共享对象上。) – 2012-07-29 16:56:27