jquery ui datepicker。对象中的选项。内部函数内的'this'不引用obj

时间:2012-12-22 06:55:50

标签: javascript jquery jquery-ui jquery-ui-datepicker

jquery ui datepicker:

我想将选项作为obj传递:

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

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

我的要求是:

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

1 个答案:

答案 0 :(得分: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);
     }
  }