这是 Javascript 上下文范围所期望的。this
指的是调用问题的上下文。例子:
var myfunc = function(){
console.log(this);
};
var a = ['a'];
var b = ['b'];
var c = ['c'];
a.myfunc = myfunc; // ["a", myfunc: function]
b.myfunc = myfunc; // ["b", myfunc: function]
c.myfunc = myfunc; // ["c", myfunc: function]
a.myfunc();
b.myfunc();
c.myfunc();
有几种方法可以解决它:
跨浏览器:
$('#chat_input input').focusin(function(event){
console.log(this); //prints correct input element
var self = this;
$(function(){
console.log(self);
$(self).transition({width: 840, duration: 200, paddingLeft: 60});
$('.target').fadeIn();
})
})
使用jQuery.proxy跨浏览器:
$('#chat_input input').focusin(function(event){
console.log(this); //prints correct input element
$($.proxy(function(){
console.log(this); //prints "#document"
$(this).transition({width: 840, duration: 200, paddingLeft: 60});
$('.target').fadeIn();
}, this))
})
使用Function.prototype.bind的现代浏览器:
$('#chat_input input').focusin(function(event){
console.log(this); //prints correct input element
$((function(){
console.log(this); //prints "#document"
$(this).transition({width: 840, duration: 200, paddingLeft: 60});
$('.target').fadeIn();
}).bind(this))
})