首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$(this).attr('id')返回.each的未定义错误jquery

$(this).attr('id')返回.each的未定义错误jquery
EN

Stack Overflow用户
提问于 2014-08-08 21:50:03
回答 4查看 7.8K关注 0票数 0

我有以下HTML:

代码语言:javascript
复制
<div class="bio" id="bio-1">Test 1</div>
<div class="bio" id="bio-2">Test 2</div> 

而Jquery:

代码语言:javascript
复制
 $(document).ready(function () {
        var bio = $('.bio');
        bio.each(function (){
            var bioId = $(this).attr('id');
            bioId.click(function() {            
                    $(this).addClass('visible');
             });
         });
 });

但是我在控制台中看到一个错误,它说bioId是未定义的。有什么想法吗?http://jsfiddle.net/xm679zbe/

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-08 21:56:59

在这一行之后:

代码语言:javascript
复制
var bioId = $(this).attr('id');

bioId将保存一个字符串或undefined。它将不引用jQuery对象。

如果您的目标是在单击visible类时将其添加到任何.bio元素,那么:

代码语言:javascript
复制
$(".bio").click(function() {
    $(this).addClass("visible");
});

...although (从名字开始工作),如果它们一开始不是“可见的”,你怎么能点击它们呢?

票数 3
EN

Stack Overflow用户

发布于 2014-08-08 21:56:52

我认为您希望在单击".bio“时添加可见类,因此不必编写如此复杂的代码。简单地做

代码语言:javascript
复制
$(".bio").on("click",function(){
$(this).addClass("visible");
})
票数 0
EN

Stack Overflow用户

发布于 2014-08-08 21:56:24

问题是,您是在id属性上调用id,而不是jQuery对象。

$(this).attr('id');将以字符串的形式向您提供元素的ID,您不能向该字符串添加事件侦听器。

bioId设置为迭代中的实际对象:

代码语言:javascript
复制
$(document).ready(function () {
    var bio = $('.bio');
    bio.each(function () {
        var bioId = $(this);
        bioId.click(function () {
            $(this).addClass('visible');
        });
    });
});

Demo

或者,您可以完全删除变量:

代码语言:javascript
复制
$('.bio').click(function () {
        $(this).addClass("visible");
    });
});

Demo

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25212756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档