jquery小部件回调中的“this”

时间:2011-07-22 09:35:03

标签: javascript jquery jquery-ui

我有以下小部件

var a = $('#test').timetable({
            cell_click: openDialog
        });

其中cell_click是由

生成的事件
_create:function(){ 
    dayBodyCells.click(function(){
            if( !$(this).hasClass('cell-inactive') ){
              var dic = self.getElementPos(this);
              self._trigger('cell_click', null,dic);        
        }
    });

openDialog是回调函数。在dayBodyCells的回调函数中,我this等于td元素,这正是我所期望的。我很好奇 - 为什么this在函数openDialog内代替#test

2 个答案:

答案 0 :(得分:1)

在绑定事件处理程序(回调)中,this指的是触发事件的元素。所以:

$('#myid').click(function(){
    // this is the #myid element
})

在您的代码中,dayBodyCells必须是td(如您所料),因此thisclick处理程序中引用它。但是,当您触发cell_click事件时,您必须从#test元素(通过self._trigger)触发它。

如果self._trigger('cell_click', null,dic)$(this).trigger('cell_click', null,dic)替换,则this会引用td中的openDialog

查看http://www.pkshiu.com/loft/archive/2009/01/understanding-this-this-and-event-in-a-jquery-callback-functionhttp://api.jquery.com/category/events/

答案 1 :(得分:0)

'因为它只是吗?任何函数的this都是在调用时建立的,事件处理程序的契约是this设置为具有事件的DOM元素,而不是事件处理程序所在的对象可以找到。

请考虑以下事项:

b = "DOG".toLowerCase
console.log(b());

你可能会认为这会打印出“狗”,但没有。 toLowerCase打印出this指向的字符串的小写版本。当像这样调用函数时,this设置为undefined,所以你得到

TypeError: can't convert undefined to object

(至少有一个Firefox - afaik,每个浏览器都会以某种方式失败。)

你的困惑可能是this似乎模糊地像一个词汇绑定的变量。它不是,它更接近普通函数参数或arguments列表本身。