2014-08-08 2 views
0

я следующий HTML:

<div class="bio" id="bio-1">Test 1</div> 
<div class="bio" id="bio-2">Test 2</div> 

и Jquery:

$(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/

+2

Независимо от значения 'bioId', это определенно не объект jQuery, поэтому вы не можете называть' click' на нем. Я думаю, вы просто хотите '$ ('. Bio'). Click (function() {$ (this) .addClass ('visible');});'. Нет необходимости усложнять работу. –

+1

* «... Я получаю сообщение об ошибке в консоли, говорящей, что bioId не определено ...» * Я подозреваю, что это говорит вам, что «bioId.click» не определено, а не «bioId». :-) –

ответ

3

После этой линии:

var bioId = $(this).attr('id'); 

bioId проведет либо строку или undefined. Он не будет ссылаться на объект jQuery.

Если ваша цель состоит в том, чтобы добавить visible класс к любому .bio элемента, когда он щелкнул, а затем:

$(".bio").click(function() { 
    $(this).addClass("visible"); 
}); 

... хотя (работает от имени), если они не являются «видимыми» для начните с, как бы вы могли на них нажать?

+1

The Fiddle содержит CSS, который определяет стиль 'visible' class '(это просто другой цвет, но это интересный выбор для имени). – AstroCB

+0

@AstroCB: Спасибо. Жаль, что информации не было в этом вопросе. :-) –

-1

Проблема в том, что вы вызываете .click() в атрибут id, а не в объект jQuery.

$(this).attr('id'); предоставит вам идентификатор элемента в виде строки, к которой вы не можете добавить прослушиватель событий.

Набор bioId для реального объекта в итерации:

$(document).ready(function() { 
    var bio = $('.bio'); 
    bio.each(function() { 
     var bioId = $(this); 
     bioId.click(function() { 
      $(this).addClass('visible'); 
     }); 
    }); 
}); 

Demo

В качестве альтернативы, вы можете удалить переменные вообще:

$('.bio').click(function() { 
     $(this).addClass("visible"); 
    }); 
}); 

Demo

0

Я думаю, что вы хотеть добавьте класс, видимый всякий раз, когда вы нажимаете «.bio», поэтому вам не нужно писать такой сложный код. Просто сделать

$(".bio").on("click",function(){ 
$(this).addClass("visible"); 
}) 
-1

Поскольку вы перебор Повсеместно элементы, которые содержат класс .bio нет никакой необходимости, чтобы извлечь идентификатор и установить новый класс, вы можете сделать это следующим образом:

$(document).ready(function() { 
     var bio = $('.bio'); 
     bio.each(function(){ 
      $(this).click(function() {    
        $(this).addClass('visible'); 
      }); 
     }); 
}); 

Надеется, что это работает :)

Смежные вопросы