0

jquery ui 日期选择器:

我想像这样将选项作为 obj 传递:

  obj = {
     beforeShow: function(input) {
         console.log(this);   
     }
  }

当我这样调用 : 时obj.beforeShow(),'this' 打印为我在顶部定义的 obj。什么时候,我这样称呼:$("#somelement").datepicker(obj);'this' 打印为 jquery 对象#someelement

我的要求是:

我在按钮面板中添加了自定义下拉菜单。它们包含“昨天,上个月”。相同的代码用于将此选择框添加到事件的函数中beforeShow,和onChangeMonthYear。这些事件在第一次显示时自动调用,datepicker当月、年发生变化时。但是,我没有发现任何在“日期”更改时应该触发的事件(比如从那个月的 20 日到 22 日)。所以,我想beforeShow通过调用来调用该对象的事件this.beforeShow()。但是,“this”指的是 html 元素。实际上,我通过遵循一些常规方法(例如直接使用对象变量(obj)而不是“this”)使其工作,但想知道正确的方法。

4

1 回答 1

0
 obj = {
     beforeShow: jQuery.proxy(function(input) {
         console.log(this);   
     }, this)
  }

试试上面的代码。

编辑:解释

这是一个范围问题。当您在另一个内部定义一个函数时,this内部函数内部将引用内部函数。如果你想this在内部函数内部引用其他对象而不是外部函数,那么你可以这样做。

 var objectX = function(){};
 obj = {
     beforeShow: jQuery.proxy(function(input) {
         console.log(this);   
     }, objectX)
  }

参考第一个代码片段: jQuery.proxy 将做的是将this内部内部函数更改为引用外部函数。还有其他方法可以做到这一点。下面列出了一种这样的方法。this当您出于某种原因希望内部函数内部引用内部函数时,这将派上用场。

 var _self = this;
 obj = {
     beforeShow: function(input) {
         console.log(_self);
     }
  }
于 2012-12-22T06:59:08.813 回答