$(this)返回'undefined'

时间:2013-11-28 02:15:20

标签: javascript jquery

编辑:
似乎错误的项目正在注册mouseenter。所以我猜这个问题已经解决了。

在以下代码中

$(".nav").mouseenter(function(){
     $('.'+$(this).attr("id")).stop().animate({"opacity": 1}, 800);
});  

$(this)正在返回[object Object]而不是鼠标输入的项目 编辑:
confirm($(this));添加为.mouseenter函数内的最后一行并将鼠标悬停在其中一个区域后,对话框显示[object Object]。具有id的东西是找到具有等于被鼠标对象的id的类的元素。我在控制台中自己测试了一些代码,它运行得很好。 在使用$(this)运行console.log后,似乎$(this)实际上是在输出,但是$(this).attr(“id”)仍然没有返回ID。
这是受影响的HTML:

<div id="body">
<span class="nav current" id="1">Home</span>
<span class="nav" id="2">Music</span>
<span class="nav" id="3">More</span>
</div>
<span class="nav background 1">Home</span>
<span class="nav background 2">Music</span>
<span class="nav background 3">More</span>

2 个答案:

答案 0 :(得分:2)

$(this)实际上是触发函数调用的对象。

正确的代码:

$(".nav").mouseenter(function(){
     $(this).stop().animate({"opacity": 1}, 800);
});  

答案 1 :(得分:0)

看到你的事件处理程序依赖于具有ID的元素,我会使初始选择器更加健壮。此外,没有必要将this包装在jQuery对象中,所以我也删除它...

// only find .nav elements that also have an "id" attribute
$('.nav[id]').on('mouseenter', function(e) {
    // here, `this` is the .nav element that has received a `mouseenter` event
    var selector = '.' + this.id;
    $(selector).stop().animate({ opacity: 1 }, 800);
});