这很容易,但我看不到它。需要另一个(更智能)的眼睛。
这有效:
$('#topmenu li').hover(
function(){
$this = $(this);
alert( $this.attr('id') );
}
);
这有效:
$('#topmenu li').hover(
function(){
$this = $(this);
setTimeout(function($this){
alert( 'hello' );
},800);
}
);
但这不起作用:
$('#topmenu li').hover(
function(){
$this = $(this);
setTimeout(function($this){
alert( $this.attr('id') );
},800);
}
);
我错过了什么?
答案 0 :(得分:2)
$this
$('#topmenu li').hover(
function(){
var $this = $(this);
setTimeout(function(){
alert( $this.attr('id') );
},800);
}
);
答案 1 :(得分:2)
问题是向函数添加一个参数会在其私有作用域中创建一个局部变量,这可能会掩盖其中一个父作用域中具有相同名称的其他变量。
没有参数:
var $this = 1;
function f() {
return $this;
}
f(); // 1
使用参数:
var $this = 1;
function f($this) {
return $this;
}
f(); // undefined
f(2); // 2
$this; // 1
在第一种情况下,函数范围中没有$this
变量,因此返回全局定义的$this
变量。在第二种情况下,f()
会返回undefined
,因为$this
在本地存在,但默认设置为undefined
,而f(2)
则返回2
,因为本地$this
设置为2
。
关于您自己的情况,$this.attr('id')
会崩溃,因为未定义$this
。您必须将setTimeout(function($this){
替换为setTimeout(function(){
才能检索外部变量。
答案 2 :(得分:1)
您无需在$this
函数
setTimeout
作为参数传递
$('#topmenu li').hover(
function(){
$this = $(this);
setTimeout(function(){
alert( $this.attr('id') );
},800);
}
);