2013-04-30 78 views
-3
$('#myElement').datepicker(
    { 
     dateFormat: 'yy-mm-dd', 
     onClose: function() { 
      $(this).DoStuff; 
      console.log('close'); 
     }, 
     beforeShowDay: nationalDays, 
     minDate: new Date() 
    } 
); 

function DoStuff() { 
    console.log('DoStuff'); 
} 

我试图在datepicker关闭时调用DoStuff。我的控制台显示“关闭”,但不显示“DoStuff”。我究竟做错了什么?jQuery UI onClose调用函数

回答

3

$(this).DoStuff不会调用$(this)对象的DoStuff功能,但尝试访问$(this)对象的DoStuff财产。在你的情况下,它什么都不会做:它将被解析为未定义的,并且访问属性很可能没有副作用,所以什么都不会发生。

因为你的问题是非常基本的我敢肯定有一个误解,这里是你如何调用DoStuff功能:

DoStuff(); 

所以这个就足够了:

$('#myElement').datepicker(
    { 
     dateFormat: 'yy-mm-dd', 
     onClose: function() { 
      DoStuff(); 
      console.log('close'); 
     }, 
     beforeShowDay: nationalDays, 
     minDate: new Date() 
    } 
); 

编辑

其实,如果你要拨打的jQuery对象上的功能(虽然我不知道你真的想这样做),你可以扩展的对象是这样的:

jQuery.fn.DoStuff = function() { 
    console.log('DoStuff'); 
} 

然后你就可以致电$(this).DoStuff()。这样this将是你的函数内部jQuery对象,检查:

jQuery.fn.DoStuff = function() { 
    console.log(this); 
    console.log(this[0]); //the first (and in this case the only) element selected by the selector 
} 

$('#myElement').DoStuff(); 
1

那么你不叫它

$(this).DoStuff; <-- missing the() 

而且DoStuff没有连接到$(this)所以它不会工作,我期望看到扩展,你的代码没有。

这大概应该是

DoStuff(); 

DoStuff.call($(this)); 
1

$(this).DoStuff()意味着DoStuff()是对象,这似乎并没有这样的情况的一个成员函数。

您应该改为doStuff($(this));,并修改doStuff()以引入参数。

function doStuff(el) { 
    console.log('DoStuff called. Received element:'); 
    console.log(e); 
}