Jquery UI datepicker.对象中的选项.& # 39;这个# 39;不引用对象的内部函数

jquery ui datepicker . options in object. 'this' inside inner functions not referencing the obj

本文关键字:对象 这个 内部函数 引用 UI datepicker 选项 Jquery      更新时间:2023-09-26

jquery UI datepicker:

我想传递的选项作为一个对象,像这样:

  obj = {
     beforeShow: function(input) {
         console.log(this);   
     }
  }
当我像这样调用

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

我的要求是:

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

 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。代理将做的是改变this内部函数引用外部函数。还有其他方法可以做到这一点。下面列出了一种这样的方法。当您出于某种原因希望内部函数中的this引用内部函数时,这将派上用场。

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