jquery ui datepicker:
我想将选项作为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'。但是想知道正确的方法。
答案 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);
}
}